2010-12-16 8 views
17

मुझे पता है कि आप नहीं कर सकते, जब एक XMLHttpRequest का उपयोग कर, एक रीडायरेक्ट रोकना या इसे रोकने के लिए, के रूप में ब्राउज़र पारदर्शी रूप से इसे का पालन होगा, लेकिन यह या तोकब्जा रीडायरेक्ट स्थान

ए का निर्धारण करने के लिए संभव है क्या एक अनुरोध पुनर्निर्देशित किया गया है, या

बी निर्धारित करें जहां इसे रीडायरेक्ट किया गया है? (यह मानते हुए कि प्रतिक्रिया नहीं संकेत देता है)

उदाहरण कोड:

$.post("/my-url-that-redirects/", {}, 
    function(response, statusCode, xmlHttpRequest){ 
     //Somehow grab the location it redirected to 
    } 
); 

मेरे मामले में, फ़ायरबग पहले यूआरएल के लिए एक पोस्ट है, तो रीडायरेक्ट URL को किसी GET दिखाएगा। क्या वह स्थान प्राप्त किया जा सकता है?

var STATUS = { 
    REDIRECT: 280 
}; 

$.post('/redirected', {}, function(response, status, request) { 
    if (status == STATUS.REDIRECT) { 
    // you need to return the redirect url 
    location.href = response.redirectUrl; 
    } else { 
    $('#content').html(request.responseText); 
    } 
}); 

2) करते रीडायरेक्ट नहीं:

मुझे लगता है कि का उपयोग

+0

आप प्रतिक्रिया हेडर में क्या प्राप्त करते हैं। – epascarello

+1

xmlHttpRequest.getAllResponseHeaders() ऐसा यूआरएल का कोई संकेत नहीं देता है जिसके लिए यह था। – Snea

+3

क्या किसी को क्लाइंट-साइड पर कोई कामकाज मिला है? यदि वेब सर्वर का नियंत्रण नहीं है तो रीडायरेक्ट यूआरएल कैप्चर कैसे करें। –

उत्तर

3

1) से 301 (2 **) (यदि ajax द्वारा अनुरोध) और क्लाइंट साइड पर पुनर्निर्देशन संभाल अलग स्थिति कोड का प्रयोग करें "रीडायरेक्ट पैटर्न" = पोस्ट अनुरोध के बाद रीडायरेक्ट करना (आप उपयोगकर्ता को पोस्ट अनुरोध रीफ्रेश करने की अनुमति नहीं देना चाहते हैं ..)

AJAX अनुरोध के साथ, यह आवश्यक नहीं है, इसलिए जब पोस्ट अनुरोध AJAX है, मैं इसके बजाए आगे बढ़ता हूं (बस अलग नियंत्रक के लिए आगे बढ़ता है - आपके सर्वर-साइड फ्रैंक पर निर्भर करता है कामकाज, या आप क्या उपयोग कर रहे हैं ...)। POST अनुरोध ब्राउज़र द्वारा कैश नहीं किए जाते हैं।

दरअसल, मुझे नहीं पता कि आपको क्या कारण है, इसलिए यह आपके लिए इतना उपयोगी नहीं हो सकता है। जब सर्वर आम अनुरोध की तुलना में ajax अनुरोध के लिए अलग अलग प्रतिक्रियाएं देता है, क्योंकि ब्राउज़र रीडायरेक्ट ajax अनुरोध, पुनः निर्देशित अनुरोध XMLHttpRequest नहीं है जब यह उपयोगी है ...

[अद्यतन]

आप हेडर पहुंच सकते हैं (की रीडायरेक्ट किए जाने वाले अनुरोध) इस तरह:

$.post('redirected', {}, function(r, s, req) { 
    req.getAllResponseHeaders(); 
    req.getResponseHeader('Location'); 
}); 

होनी चाहिए 'स्थान' शीर्षक है, लेकिन यह सर्वर है, जो हेडर वापस भेजा जाता है पर निर्भर करता है ...

+0

दुर्भाग्य से यह एक ऐसा पोस्ट है जो भरने वाले फॉर्म को अनुकरण कर रहा है, न कि AJAX एपीआई, इसलिए मेरे पास वापस भेजे गए स्टेटस कोड पर कोई नियंत्रण नहीं है, या फिर यह रीडायरेक्ट करता है या नहीं। – Snea

+0

क्षमा करें, सुनिश्चित नहीं है कि मैं आपकी टिप्पणी समझता हूं। क्या आपका मतलब है, सर्वर-साइड स्वयं से प्रबंधित नहीं है? तो, आप सर्वर-साइड नहीं बदल सकते हैं? – Vojta

3

4 वर्ष के बाद अब क्रोम 42+ (ओपेरा 2 9 +) और फ़ायरफ़ॉक्स 39+ में एक्सएचआर उदाहरण से प्रतिक्रियाURL का उपयोग करके अंतिम रीडायरेक्ट स्थान ढूंढना संभव है लेकिन यह अभी तक आईई, एज या सफारी में उपलब्ध नहीं है।