2009-05-28 19 views
27

क्या xhr ऑब्जेक्ट से अनुरोध url निकालने का कोई तरीका है? मैं चैनल प्रॉपर्टी के माध्यम से फायरबग में यूआरएल देख सकता हूं लेकिन आप इसे जावास्क्रिप्ट का उपयोग करके क्वेरी नहीं कर सकते हैं।xhr ऑब्जेक्ट से अनुरोध यूआरएल प्राप्त करें

+0

एक Firefox विस्तार के लिए या एक पृष्ठ पर एक स्क्रिप्ट के लिए है? यदि यह पृष्ठ पर है, तो आपके पास पहले से ही वह जानकारी क्यों नहीं होगी? –

+0

मेरे पास विभिन्न डेटा का अनुरोध करने वाले कई अंतराल हैं, मेरे पास सामान्य घटनाओं को संसाधित करने के लिए कुछ सामान्य AJAXStart और AJAX पूर्ण घटनाएं हैं (प्रगति संकेतक दिखाएं/छुपाएं) मुझे AJAX पूर्ण घटना के भीतर किनारे के मामले के लिए यूआरएल तक पहुंच की आवश्यकता है। – redsquare

उत्तर

6

मुझे आशा है कि मैं आपकी समस्या को सही ढंग से समझ रहा हूं।

इस तरह की कार्यक्षमता के लिए अनुमति देने के लिए अपने एक्सएचआर ऑब्जेक्ट्स को अपनी ऑब्जेक्ट से लपेटना काफी आसान होना चाहिए।

नीचे वाले अत्यंत सरलीकृत उदाहरण है:

// Assumption: GetXHR() returns a new XHR object, cross browser. 

function HTTPGet(url, onStartCb, onCompleteCb) 
{ 
    var xhr = GetXHR(); 
    // Construct your own xhr object that contains the url and the xhr object itself. 
    var myXhr = { xhr: xhr, url: url }; 

    xhr.onreadystatechange = function() 
    { 
    if (xhr.readyState == 4 && xhr.status == 200) 
    { 
     onCompleteCb(myXhr); 
    } 
    }; 

    xhr.open("GET", url); 
    onStartCb(myXhr); 
    xhr.send(null); 
} 

मैं बड़े पैमाने पर इस परीक्षण नहीं किया है, लेकिन यह काम करना चाहिए और कुछ संशोधनों (त्रुटि हैंडलिंग, गुजर मानकों, आदि) के साथ आप शायद चालू करने के लिए सक्षम होना चाहिए यह उदाहरण पूरी तरह कार्यात्मक समाधान में है।

+0

में पता है, यह अनुपलब्ध है, हालांकि यह सबसे अच्छा तरीका होगा हालांकि मैं बिना त्वरित जीत की उम्मीद कर रहा था मैं जिन सभी जेएस के साथ काम कर रहा हूं, उन्हें दोबारा करने की जरूरत है। उत्तर के लिए चीयर्स – redsquare

+0

यदि आप वर्तमान में उपयोग कर रहे कुछ कोड प्रदान कर सकते हैं, तो संभवतः आपके कोड को संशोधित किए बिना इस कार्यक्षमता को जोड़ने का एक शानदार तरीका पता लगाना संभव हो सकता है। XHR ऑब्जेक्ट्स को बंदर-पैच करना संभव होना चाहिए (मैंने इसका परीक्षण नहीं किया है, आप) अपने कॉलबैक पर लौट रहे हैं (क्या आप?)। –

5

https://developer.mozilla.org/en/XmlHttpRequest के अनुसार, यदि आप उन्नत विशेषाधिकार प्राप्त कर चुके हैं तो आप वास्तव में channel प्राप्त कर सकते हैं; हालांकि, channel गैर मानक (अन्य ब्राउज़रों में काम नहीं कर सकता है), और वास्तव में http://www.w3.org/TR/XMLHttpRequest/ पर W3C चश्मा channel का उल्लेख नहीं करते हैं और न ही "अनुरोध URL निकालने" का कोई अन्य तरीका नहीं है। मुझे संदेह है कि, ब्राउज़र में इतनी उचित तरीके से ऐसा करने का कोई तरीका नहीं है।

+0

यह जानकारी प्राप्त करने के लिए किसी एक्सटेंशन के लिए कोई समस्या नहीं है, (जैसा कि इसे विशेषाधिकार प्राप्त किया गया है) लेकिन जहां तक ​​मुझे सामान्य xmlhttprequest उपयोग –

27

यदि आप jQuery का उपयोग कर रहे हैं, तो आप jqXHR ऑब्जेक्ट को संशोधित करने के लिए AJAX अनुरोध में "preSend" फ़ंक्शन का उपयोग कर सकते हैं। अर्थात, और

$.ajax({ 
... 
url: "http://some/url", 
beforeSend: function(jqxhr, settings) { jqxhr.requestURL = "http://some/url"; }, 
... 
}); 

jqXHR वस्तु विभिन्न कॉलबैक करने के लिए पारित कर दिया तो उस चर, jqXHR.requestURL, तो आप उपयोग कर सकते हैं जो करना होगा।

+4

यदि आप 'jqxhr.requestURL = settings.url' करते हैं, तो आप इसे' $ .ajaxSetup' कॉल में वैश्विक स्तर पर सेट कर सकते हैं। –

15

निम्नलिखित के साथ कोई आवरण हैक की जरूरत है:

var xhrProto = XMLHttpRequest.prototype, 
    origOpen = xhrProto.open; 

xhrProto.open = function (method, url) { 
    this._url = url; 
    return origOpen.apply(this, arguments); 
}; 

उपयोग:

var r = new XMLHttpRequest(); 
r.open('GET', '...', true); 
alert(r._url); // opens an alert dialog with '...' 
संबंधित मुद्दे