使用jQuery的$。阿贾克斯()或$ .getScript()方法时,任何方法来识别重定向?(An

2019-10-20 12:21发布

在我公司的在线应用,我们已经建立了一个基于JSONP的API,返回所使用的一个书签我正在开发的一些数据。 这里是一个快速测试页面我建立命中使用jQuery的API的URL $.ajax()方法:

http://troy.onespot.com/static/3915/index.html

如果你看一下使用Firebug的“网络”选项卡(或类似)的要求,你会看到发生的事情是该URL请求成功,但由于我们的应用程序重定向任何未经授权的用户登录页面,登录页面还通过浏览器请求,看似理解,如JavaScript。 这不可避免地会导致异常,因为登录页面是HTML,JavaScript不。

基本上,我正在寻找任何类型的挂钩来确定何时在重定向请求的结果 - 一些方法来确定URL解析为一个JSONP响应(这将执行我的书签脚本的预定义的方法),或者如果它导致了重定向。 我试着包裹$.ajax()方法在try {} catch(e) {}块,但不捕获异常,我假设,因为请求是成功的,只是没有登录页面的解析如JavaScript。 是否有任何地方,我可以用一个try {} catch(e) {}块,或任何财产$.ajax()可能让我磨练异常或以其他方式确定,我已经被重定向?

其实,我怀疑这是可能的,因为$.getScript()或相当于设置$.ajax()只是用来加载脚本动态,并不能检查响应头,因为它是跨域的,而不是真正的AJAX:

http://api.jquery.com/jQuery.getScript/

我的替代方案是只断火的$.ajax()一段时间,直到我要么得到了JSONP回调或不这样做,而在后一种情况下,假定用户没有登录并提示他们这样做。 我不喜欢这种方法,虽然,因为这将导致大量的应用服务器不必要的请求,并且也将堆积在此期间的JavaScript异常。

感谢您的任何建议!

Answer 1:

当使用内的jQuery的AJAX方法,它应该是设置的报头:在所述请求中的“X-请求-通过的XMLHttpRequest”。

我最初的想法是,你可以检查,看看是否有头被设置在服务器端,如果是这样,而不是发出重定向,发回一些JSON与重定向URL,并让客户端JS查找存在该重定向的响应,服务器只发出重定向时,它不是一个AJAXy电话。



Answer 2:

按照jQuery的文档 ,如果你不指定的dataType为脚本,因为你现在正在做的,它会揣摩什么反应是基于MIME类型。 然后,您也添加一个名为dataFilter到$就方法的选择; 它是一个函数,它有两个参数,dataFilter(数据,类型)和类型是由jQuery的确定的数据类型,可以看的类型和相应地PROCEDE。



文章来源: Any way to identify a redirect when using jQuery's $.ajax() or $.getScript() methods?