2012-02-07 88 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