2012-02-07 89 views
72

我想使用jQuery来获取URL,并明确检查它是否与302重定向回应,但跟踪重定向。

jQuery的$.ajax的似乎始终遵循重定向。我怎样才能防止这种情况,并看到没有遵循它的重定向?

有包含“jQuery的AJAX重定向”称号的各种问题,但他们似乎都涉及到一些办成对方球门,而不仅仅是直接检查服务器给出了状态。

回答

11

jQuery的浏览器的JavaScript引擎的范围内运行被发现。通过JavaScript或html元素(链接,脚本,图像,音频或视频等)请求的每个资源都受http重定向的约束。很遗憾,没有办法让javascript以您需要的方式访问低级http。

很抱歉,答案是否定的。

4

而其他人谁回答了这个问题的(可惜)正确的,这个信息是从我们的浏览器隐藏起来,我想我会后,我想出了一个解决办法:

我配置我的服务器应用程序设置包含请求的url的自定义响应头(X-Response-Url)。每当我的ajax代码收到响应时,它会检查是否定义了xhr.getResponseHeader("x-response-url"),在这种情况下,它将它与通过$.ajax()最初请求的url进行比较。如果字符串不同,我知道有一个重定向,另外,我们实际上到达了什么网址。

这样做的缺点是需要一些服务器端的帮助,而且如果URL在往返过程中被消除(由于引用/编码问题等),也可能会出现故障......但对于99%的情况,这似乎完成了工作。


在服务器端,我的具体情况是使用金字塔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 
27

欢迎来到未来!

现在,我们有从XHR对象“responseURL”属性。好极了!

参见How to get response url in XMLHttpRequest?

然而,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); 
    } 
}); 

这不是一个干净的解决方案,我想jQuery开发团队将东西responseURL在未来的版本。

提示:只是比较responseUrl原始URL。如果相同,则不会给出重定向。如果它的“不确定”,则可能是不支持responseUrl。但正如尼克加维所说,AJAX请求从来没有机会不遵循重定向,但您可以通过使用responseUrl属性来解决许多任务。

-11
$.ajax({ 
type: "POST", 
url: "http://arudhrainnovations.com/android/testregister.php", 
data: dataString, 
dataType: "json", 
cache: false, 
success: function(result){ 
     alert(result); 
     } 
} 
if (result.success==1) 
{ 
    windows.locations = "index.html"; 
    return; 
} 

在活动服务器的json响应之后重定向文件。检查响应标签 success ==1 并将下面的代码用于重定向。

windows.locations =“index.html”;

请让我在[email protected]

+1

本准则知道进一步的细节永远不会工作的兄弟... – brothers28 2015-08-07 11:06:19

+0

祝你好运 – 2016-11-01 20:38:49