2010-07-08 28 views
11

पर रीडायरेक्ट हो जाता है तो मुझे- यह AJAX अनुरोध मिला है, देखें-। गोरा, लगभग 6 फुट लंबा, इस तरह दिखता है: 'getThing/abc123':पता लगाएं कि जहां jquery AJAX अनुरोध

$.ajax({ 
    url: 'http://example.com/makeThing', 
    dataType: 'html', 
    type: 'POST', 
    data: { 
     something:someotherthing 
    }, 
    complete: function(request, status) { 
     console.log("headers=" + request.getAllResponseHeaders();); 
    } 
}); 

क्या होता है अनुरोध '/ makeThing' रिटर्न कि एक 302 एक दूसरे URL पर रीडायरेक्ट है। मैं बस इतना करना चाहता हूं कि वह दूसरा यूआरएल क्या है (प्रोग्रामेटिक रूप से- यह हर बार अलग होगा, इसलिए फायरबग में जांच करना मेरी मदद नहीं करता है)। मैंने प्रतिक्रिया शीर्षलेखों को नलसाजी करने की कोशिश की है जो 'पूर्ण' कॉलबैक पर वापस आते हैं, लेकिन यह मुझे केवल दूसरे अनुरोध पर वापस आया है।

बाधाएं: - मेरे पास सर्वर पर कोई नियंत्रण नहीं है - बस जेएस। - क्या मुझे स्विच करना चाहिए (डोजो? प्रोटोटाइप?)

आदर्श रूप से, मैं कुछ प्रकार के हेडर-अनुरोध के लिए अनुरोध करता हूं कि यह पता लगाने के लिए कि रीडायरेक्ट यूआरएल क्या है, केवल हेडर प्राप्त कर रहा है प्रारंभिक 302 प्रतिक्रिया।

विफल होने के बाद (चूंकि jquery ऑटो-रीडायरेक्ट रीडायरेक्ट करता है और अनुरोधों के बीच में कदम उठाने का कोई तरीका नहीं लगता है), मुझे अंतिम प्रतिक्रिया प्राप्त होती है और किसी भी तरह से यूआरएल प्राप्त करने के लिए इसका उपयोग किया जाता है ... कुछ? अनुरोध वस्तु, शायद?

टीएलडीआर: एक AJAX अनुरोध भेजना। फ्रेमवर्क स्वचालित परिणामस्वरूप 302 रीडायरेक्ट का पालन करता है। मैं यह कैसे पता लगा सकता हूं कि यह कहां रीडायरेक्ट किया गया था?

संपादित करें, स्पष्टीकरण: अंतिम url अलग होगा हर समय बुला 'makeThing' बनाने के लिए क्या उसके बाद 'getThing/abc123'

+0

फ़ायरबग के साथ इसे जांचें। –

उत्तर

0

आप क्यों नहीं बस यूआरएल ना लगाएं पर होस्ट किया गया है सर्वर का कारण बनता है अपने ब्राउज़र में 'http://example.com/makeThing' और देखें कि आप कहां समाप्त होते हैं?

+0

रीडायरेक्ट डेटा पर निर्भर हो सकता है - यानी यदि यह वैध है -> अगले पृष्ठ पर रीडायरेक्ट करें। यदि यह अमान्य है -> पृष्ठ संपादित करने के लिए पुनर्निर्देशित करें। यदि यह नियमित अनुरोध के बजाय एक्सएचआर है तो यह अलग-अलग कार्य कर सकता है। उदाहरण के लिए, रेल में यह असामान्य नहीं है। –

+0

जैसा कि मेरे सुधार में बताया गया है, अंतिम यूआरएल बनाने के हर अनुरोध पर बहुत कुछ होगा। makeThing आईडी 'abc123' के साथ 'चीज़' उत्पन्न करता है जो उसके बाद GetThing/abc123 पर पहुंच योग्य होता है। इसलिए मुझे प्रोग्रामेटिक रूप से चीज़ तक पहुंचने की ज़रूरत क्यों है। – Fishtoaster

0

यदि आप फायरबग बूट करते हैं, तो कंसोल खोलें, आप यह कह सकते हैं कि अनुरोध वास्तव में कहां जा रहा है। जब आप देखते हैं कि AJAX अनुरोध प्रसंस्करण समाप्त हो गया है, तो उस कंसोल आइटम का विस्तार करें और आप शामिल अनुरोध और कोई प्रतिक्रिया शीर्षलेख देखेंगे।

+0

क्षमा करें अगर मैं इस बिंदु पर विशेष रूप से स्पष्ट नहीं था: मेकिंग एक जनरेटर फ़ंक्शन है- जहां इसे रीडायरेक्ट किया जाता है, इसे हर बार अलग किया जाता है, इसलिए मुझे प्रोग्रामेटिक रूप से ऐसा करने का एक तरीका चाहिए। – Fishtoaster

4

यदि संभव हो, अपने सर्वर उन पृष्ठों (गंतव्य पृष्ठों, नहीं पुनः निर्देशित एक) पर एक हैडर, उदाहरण के लिए एक "current-location" हैडर सेट की स्थापना की है, तो आप ऐसा कर सकते हैं:

$.ajax({ 
    url: 'http://example.com/makeThing', 
    dataType: 'html', 
    type: 'POST', 
    data: { 
     something:someotherthing 
    }, 
    complete: function(request, status) { 
     var location = request.getResponseHeader("current-location"); 
    } 
}); 

हाँ यह, थोड़ा हैकी है, लेकिन जब से रीडायरेक्ट को XmlHttpRequest ऑब्जेक्ट (आंतरिक रूप से एक्सेस नहीं किया जा सकता है) में आंतरिक रूप से संभाला जाता है, तो आपके पास अधिक विकल्प नहीं है।

You can check the spec, इस इरादा XmlHttpRequest के लिए व्यवहार है:

यूआरएल स्थान हैडर से अवगत करा दिया की उत्पत्ति XMLHttpRequest मूल के साथ एक ही मूल है और पुन: निर्देशन अनंत लूप सावधानियों का उल्लंघन नहीं करता है, तो समान मूल अनुरोध ईवेंट नियमों को देखते हुए पारदर्शी रूप से रीडायरेक्ट का पालन करें।

+1

अगर मैं सर्वर तक पहुंच प्राप्त करता तो यह काम करेगा। :(मैं बदल सकता हूं जावास्क्रिप्ट। – Fishtoaster

+2

@ फिशटोस्टर - AFAIK, आपके पास कोई विकल्प नहीं है, यह कम से कम क्रॉस-ब्राउजर का खुलासा नहीं किया गया है। क्या आप यह समझने के लिए सामग्री पढ़ सकते हैं कि आप कौन से पेज हैं पर, या कुछ वैकल्पिक दृष्टिकोण? –

+0

शायद यही है कि मुझे क्या करना है। भंगुर, लेकिन मुझे लगता है कि यह सब कुछ है। – Fishtoaster

2

यह आपके विशेष स्थिति में मदद नहीं कर सकते हैं, लेकिन जब मैं एक ही समस्या थी मैं पेज मैं के बाद पुन: निर्देशन HTML में एक सुराग था पर समाप्त हुआ देखा:

<meta property="og:url" content="THE_URL_OF_THE_PAGE" /> 

कुछ पृष्ठों को स्क्रिप्ट है उनमें स्निपेट फेसबुक टिप्पणी जोड़ने के लिए उपयोग किए जाते हैं, और उनमें कभी-कभी वर्तमान यूआरएल भी हो सकता है। या यहाँ तक कि के रूप में दो टूक इस रूप में:

<a href="http://www.facebook.com/sharer.php?u=THE_URL_OF_THE_PAGE"> 
0

यह वास्तव में बहुत बुरा है कि हम उस हैडर आकर्षित नहीं कर सकते हैं ... लेकिन जैसा कि मैगनस ने कहा, आप उस पृष्ठ जो दूँगी से कुछ अद्वितीय सामग्री पढ़ने के लिए कोशिश कर सकते आप निर्धारित करते हैं कि वास्तव में आपको कौन सा पृष्ठ भेजा गया था ...

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