我想使用jQuery获取URL并显式检查它是否以302重定向响应,但不遵循重定向.
jQuery $.ajax
似乎总是遵循重定向.如何防止这种情况,并在不遵循它的情况下查看重定向?
像"jquery ajax redirect"这样的标题有各种各样的问题,但它们似乎都涉及完成其他目标,而不仅仅是直接检查服务器给出的状态.
Rik*_*avi 41
欢迎来到未来!
现在我们有来自xhr对象的"responseURL"属性.好极了!
但是,jQuery(至少1.7.1)不能直接访问XMLHttpRequest对象.你可以使用这样的东西:
var xhr;
var _orgAjax = jQuery.ajaxSettings.xhr;
jQuery.ajaxSettings.xhr = function () {
xhr = _orgAjax();
return xhr;
};
jQuery.ajax('http://test.com', {
success: function(responseText) {
console.log('responseURL:', xhr.responseURL, 'responseText:', responseText);
}
});
Run Code Online (Sandbox Code Playgroud)
这不是一个干净的解决方案,我想jQuery团队将在未来的版本中为responseURL做些什么.
提示:只需将原始网址与responseUrl进行比较即可.如果它相等则没有给出重定向.如果它是"未定义",则可能不支持responseUrl.然而正如Nick Garvey所说,AJAX请求永远不会有机会不遵循重定向,但您可以使用responseUrl属性来解决许多任务.
Eli*_*ins 11
虽然回答这个问题的其他人(遗憾地)是正确的,这些信息是浏览器隐藏的,但我想我会发布一个我想出的解决方法:
我配置了我的服务器应用程序以设置X-Response-Url
包含所请求的URL 的自定义响应标头().每当我的ajax代码收到响应时,它会检查是否xhr.getResponseHeader("x-response-url")
已定义,在这种情况下,它会将其与最初请求的url进行比较$.ajax()
.如果字符串不同,我知道有一个重定向,另外,我们实际到达了什么网址.
这确实有一个缺点,需要一些服务器端的帮助,并且如果在往返期间网址被引导(由于引用/编码问题等)也可能会崩溃...但是对于99%的情况,这似乎得到了完成的工作.
在服务器端,我的具体案例是使用Pyramid Web框架的python应用程序,我使用了以下代码段:
import pyramid.events
@pyramid.events.subscriber(pyramid.events.NewResponse)
def set_response_header(event):
request = event.request
if request.is_xhr:
event.response.headers['X-Response-URL'] = request.url
Run Code Online (Sandbox Code Playgroud)