2011-05-26 12 views
13

का उपयोग करके रीडायरेक्ट किया गया है, मैं अपने वेब एप्लिकेशन में पीआरजी (पोस्ट-रीडायरेक्ट-गेट) पैटर्न का पालन कर रहा हूं, और मेरे अधिकांश पोस्ट करने के लिए निम्न की तरह कुछ उपयोग करता हूं:एक पोस्ट के बाद वास्तविक यूआरएल प्राप्त करना जो jquery .ajax()

$.ajax({ 
    type: 'POST', 
    url: 'A.html', 
    data: '....', 
    statusCode: { 
     302: function() { 
      alert("302"); // this is never called 
     }, 
     200: function() { 
      alert("200"); 
     }, 
    }, 
    success: function (data, textstatus) { 
     alert('You are now at URL: ' + ??); 
    }, 
    error: function (data) { 
    }, 
    complete: function (jqXHR, textstatus) { 
     alert('You are now at URL: ' + ??); 
    }, 
}); 

किसी भी पुनर्निर्देशन के बाद मुझे URL प्राप्त करने की आवश्यकता है, यानी अंतिम GET का URL जिसे .ajax() फ़ंक्शन कहा जाता है। उदाहरण के लिए A.html पर एक पोस्ट या तो B.html या C.html पर रीडायरेक्ट हो सकता है (हमेशा 302 के माध्यम से)। मैं अंतिम यूआरएल कैसे प्राप्त करूं?

मैं jquery 1.5.1 का उपयोग कर रहा हूं, और प्रॉक्सी का उपयोग करके देखा गया है कि jquery रीडायरेक्ट के बाद चुपचाप है - जिसे मैं खुश हूं। मुझे 302 के साथ जवाब देने वाले किसी भी यूआरएल की परवाह नहीं है - मैं उस समय अंतिम अनुरोध के यूआरएल को जानना चाहूंगा .ajax() की "सफलता:" या "पूर्ण:" हुक निकाल दिए जाते हैं।

+0

में वर्तमान URL का उपयोग कर सकते डेटा के साथ कि यूआरएल भेजने के लिए और पुनः प्राप्त AJAX – diEcho

+0

के 'सफलता' भाग में आप उदाहरण के साथ विस्तृत कर सकते हैं और कृपया निर्दिष्ट करें कि नेस्टेड रीडायरेक्ट हो रहा है या नहीं। उदाहरण के साथ इसे विस्तृत करें - उदाहरण के लिए A.html को एक पोस्ट या तो B.html या C.html (हमेशा 302 के माध्यम से) पर रीडायरेक्ट कर सकता है। मैं अंतिम यूआरएल कैसे प्राप्त करूं? –

+0

मैंने प्रॉक्सी का उपयोग करके पुष्टि की है कि AST को पोस्ट "302 मिला" और स्थान: B.html के साथ प्रतिक्रिया देता है। हालांकि समस्या का क्रूक्स यह है कि मैं किसी भी सबूत प्राप्त करने के लिए जावास्क्रिप्ट/jquery से पूछताछ नहीं कर सकता कि मुझे कहीं भी B.html पर रीडायरेक्ट किया गया था। अगर मैं $ (यह) पूछता हूं। Url मुझे "A.html" मिलता है, विंडो.लोकेशन इत्यादि के लिए। –

उत्तर

10

मैं अंत में इस मुद्दे को अपने सभी प्रतिक्रियाओं में एक अतिरिक्त हेडर को जोड़े द्वारा हल (उदाहरण के लिए "एक्स-मायपैप-पथ:/व्यवस्थापक/सूचकांक")।

मेरे जावास्क्रिप्ट इस प्रकार निम्नलिखित करने के लिए बदल किया जा सकता है:

success: function (data, textstatus, xhrreq) { 
    alert('You are now at URL: ' + xhrreq.getResponseHeader("X-MYAPP-PATH")); 
}, 

मैं अभी भी विश्वास तथापि कि jQuery मुझे वर्तमान URL देने के लिए सक्षम होना चाहिए, इसलिए मैं इस हैक पर विचार करें।

-1

पुनर्निर्देशन (आमतौर पर> 300) द्वारा लौटाए जा रहे स्टेटस कोड को जानने का प्रयास करें।

success: function (data, textstatus, xhrReq) { 
     //if the status is greater than 300 
     if(xhrReq.status > 300) { 
      alert('You are now at URL: ' + xhrRequest.getHeader("Location")); 
     } 
    }, 

एक और बिंदु उल्लेखनीय है कि निष्पादन के आदेश: सफलता \ विफलता -> statusCode समारोह -> पूरा

+2

नहीं - jquery 302 के किसी भी सबूत को छुपाता है। Xhrreq.status 200 है और xhr.getHeader() उपलब्ध नहीं है समारोह। –

+0

@ टॉम, getHeader ठीक काम करता है, लेकिन मुझे 302 की जांच करने की आवश्यकता है (शायद आप सही हैं –

+1

आप 'xhrReq। GetAllResponseHeaders() 'कर सकते हैं, लेकिन यदि' स्थान' नहीं है तो आप भाग्य से बाहर हैं। और @TomWells सही है, किसी भी मामले में आपको 302 प्रतिक्रिया नहीं मिलेगी। रीडायरेक्ट ब्राउज़र द्वारा छिपाए जाते हैं। – charlax

0

एक बेहतर समाधान इस तरह एक कस्टम XHR वस्तु के साथ jQuery के ajax आपूर्ति है:

var xhr = new XMLHttpRequest(); 

$.ajax({ 
    url: '/url', 
    type: 'post', 
    data: '...', 
    xhr: function() { 
     return xhr; 
    } 
}); 

तो फिर तुम किसी भी कॉलबैक

success: function() { 
    alert('You are now at URL: ' + xhr.responseURL); 
} 
संबंधित मुद्दे