2012-04-30 12 views
14

क्या यूआरएल अनुरोध प्राप्त करने का कोई तरीका है जिसे आप अंततः पुनर्निर्देशित कर रहे हैं जब xhr अनुरोध की प्रतिक्रिया 301 है?

मेरे पास ऐसी साइट है जिसमें पुराने संस्करण से कई विरासत यूआरएल हैं, जो सही नए यूआरएल पर 301 प्रतिक्रियाएं लौटाते हैं।

उपयोगिता उद्देश्यों के लिए, मैं एक पुराने यूआरएल के लिए अनुरोध करने में सक्षम होना चाहता हूं, और नया/पुनः प्राप्त करने में सक्षम होना चाहता हूं यानी "/oldpage.aspx?foo=someParam" को अनुरोध भेजें, नया वापस प्राप्त करें यूआरएल "/ arbitaryNewPageName/कुछ पैराम"।

मैं फ़ायरबग कंसोल में इस के साथ प्रयोग करना किया गया है:

$.ajax({ 
      url: "/oldpage.aspx?foo=someParam", 
      success: function(response, status, jqxhr){ 
      //poking around, trying to get the new URL, "/arbitraryNewPage/someParam" 
       console.log(jqxhr.getAllResponseHeaders()); 
       console.log(jqxhr); 
      }, 
      beforeSend: function(jqxhr, settings){ 
       console.log(jqxhr); 
       console.log(settings); 
      } 
     }); 

मैं फ़ायरबग में देख सकते हैं कि जब इस कोड चलने पर वह एक पाने के लिए "/oldpage.aspx?foo=someParam" करता है , और एक 301 प्रतिक्रिया प्राप्त करता है, फिर एक और "/ arbitaryNewPageName/कुछ पैराम" प्राप्त करने के लिए मिलता है।

पहले अनुरोध के लिए, मैं प्रतिक्रिया शीर्षलेख के स्थान मान में पुनर्निर्देशित यूआरएल देखता हूं। दुर्भाग्यवश, दूसरा अनुरोध $ .ajax.success फ़ंक्शन को पास किया गया है, और इसमें केवल अनुरोध शीर्षलेख के रेफरर मान में रीडायरेक्ट किया गया URL है।

क्या पहले प्रतिक्रिया के जवाब को रोकने में शायद कोई तरीका है, या शायद दूसरे अनुरोध के लिए अनुरोध शीर्षलेख देखें?

संपादित करें: प्रतिक्रियाओं के लिए सभी को धन्यवाद। मुझे लगता है कि मुझे यह स्पष्ट करने के लिए एक छोटी सी पृष्ठभूमि देने की ज़रूरत है कि मैं वास्तव में क्या देख रहा हूं।

एक व्यापारिक उपयोगकर्ता ने मुझे एक ऐसी सूची बनाने के लिए कहा है जो विरासत यूआरएल को नए यूआरएल से जोड़ता है। चूंकि मैंने सर्वर पर नए यूआरएल पर लीगेसी यूआरएल को रीडायरेक्ट करने के साधनों को पहले से ही लागू कर दिया है, इसलिए मैं उस काम को वापस करने और एक स्क्रिप्ट बनाने की उम्मीद कर रहा था जिसने विरासत यूआरएल के अनुरोध किए थे और यूआरएल प्राप्त किए थे कि अनुरोधों को रीडायरेक्ट किया गया था। कुछ इस तरह:

for (var i = 0; i < arrayOfLegacyUrls.length; i++) 
{ 
    $.ajax({ 
      url: arrayOfLegacyUrls[i], 
      success: function(response, status, jqxhr){ 
       var newUrl = "???"; //do magic to get URL that request was redirected to 

       writeToFileForBusinessUser(arrayOfLegacyUrls[i], newUrl); 
      } 
     }); 
} 

मेरे सवाल की जड़ यह है: मैं यूआरएल मेरे अनुरोध एक्सएचआर से पर पुनः निर्देशित किया गया था मिल सकता है? अब तक, उत्तर "नहीं" प्रतीत होता है।

+0

बाहर की जाँच करें इस पोस्ट को पढ़ने के लिए चाहते हो सकता है: http://stackoverflow.com/a/1534662/64741 – Zachary

+0

[निर्धारण क्या jQuery .ajax() के संभावित डुप्लिकेट रीडायरेक्ट की एक स्ट्रिंग को हल करता है करने के लिए] (http://stackoverflow.com/questions/6767618/determining-what-jquery-ajax-resolves-a-string-of-redirects-to) – JAAulde

उत्तर

1

मैं इस जवाब से jQuery के ajax विधि के बजाय वास्तविक एक्सएचआर वस्तु का उपयोग करके यह करने के लिए एक रास्ता मिल गया: https://stackoverflow.com/a/7015798/194099

var r = new XMLHttpRequest(); 
r.open("GET", "http://mysite.com/legacyUrl.aspx?bla=bla"); 
r.overrideMimeType("text/xml"); 
r.onload = function() 
{ 
    alert(r.responseXML.baseURI); //gets the URL the request was redirected to! huzzah! 
} 
r.send(null); 
इस के साथ

, मैं एक URL से एक अनुरोध जगह करने में सक्षम था मुझे पता है कि एक 301 वापस आ जाएगा, और यूआरएल प्राप्त करें कि अनुरोध को रीडायरेक्ट किया जा रहा है।

+0

इस समाधान के साथ समस्या यह है कि यह केवल तभी काम करता है जब प्रतिक्रिया HTML सामग्री हो (शायद एक्सएमएल भी?)। यदि आपको JSON, सादा पाठ, एक छवि, कुछ भी नहीं, आदि प्राप्त होता है, तो यह काम नहीं करेगा। – jordanbtucker

1

यह पारदर्शी रूप से काम करने के लिए होती है, कम से कम यहाँ क्या सुझाव दिया है कि:

Ajax Redirection Handling और Prevent redirection of Xmlhttprequest

एक बात तुम कर सकते हो में AJAX कॉल करने के लिए एक संदर्भ पैरामीटर के रूप में यूआरएल पारित है, और फिर सफलता संदर्भ ऑब्जेक्ट की URL प्रॉपर्टी पर प्रतिक्रिया यूआरएल की तुलना करें।

संदर्भ के बारे में जानकारी के लिए यहां देखें: http://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings

अद्यतन:

असली मुश्किल एक नया URL, मुझे लगता है कि है आप this.url बुला यदि आप वें ओवरराइड नहीं करें द्वारा प्राप्त कर सकते हैं econtext।

for (var i = 0; i < arrayOfLegacyUrls.length; i++) 
{ 
    $.ajax({ 
     url: arrayOfLegacyUrls[i], 
     success: function(response, status, jqxhr){ 
      var newUrl = jqxhr.getResponseHeader("X-MYAPP-PATH"); 
      writeToFileForBusinessUser(arrayOfLegacyUrls[i], newUrl); 
     } 
    }); 
} 
+0

जब आप "प्रतिक्रिया यूआरएल" कहते हैं, तो क्या आपका मतलब यूआरएल है मेरा अनुरोध अंततः पुनर्निर्देशित किया गया है? मैं इसे कैसे एक्सेस कर सकता हूं? – BenWillkommen

+0

हाँ, मैं मूल यूआरएल के बारे में और सोचने में भ्रमित हो गया। सफलता विधि के अंदर 'this.url' आज़माएं। मैंने तदनुसार जवाब अपडेट किया है। – Meligy

+0

दुर्भाग्यवश, this.url में विरासत यूआरएल है जो मुझे पहले से ही पता है। – BenWillkommen

संबंधित मुद्दे

 संबंधित मुद्दे