2012-08-28 23 views
8

"पुराने" डोजो के साथ एक Xhr अनुरोध (see Example 6 here) load फ़ंक्शन पर ioargs को दूसरा तर्क दे सकता है। यह ioargs प्रदान किया गया है (अन्य चीजों के साथ) अनुरोध का टाइमस्टैम्प और स्थिति कोड।AMD'ized Dojo के XHR प्रतिक्रिया कोड (+ टाइमस्टैम्प) को कैसे पुनर्प्राप्त करें?

लेकिन मैं इसे नए और "क्लीनर" (और आगे संगत) Dojo के साथ कैसे प्राप्त कर सकता हूं?
दुर्भाग्यवश, मुझे current documentation में कोई संकेत नहीं मिला।

निम्नलिखित "संदर्भित" उदाहरण के लिए उपरोक्त संदर्भित उदाहरण का बंदरगाह होना चाहिए। लेकिन, ioargs अपरिभाषित किया जाएगा:

require("dojo/request/xhr", "dojo/dom", "dojo/domReady!", 
    function(request, dom){ 
    // Look up the node we'll stick the text under. 
    var targetNode = dom.byId("getLicenseStatus"); 

    // The parameters to pass to xhrGet, the url, how to handle it, and the callbacks. 
    request.get(
     "{{dataUrl}}dojo/LICENSE", 
     { 
     handleAs: "text", 
     preventCache: true 
     } 
    ).then(
     function(data, ioargs){ 
     // FIXME: ioargs is undefined 
     targetNode.innerHTML = "XHR returned HTTP status: " + ioargs.xhr.status; 
     }, 
     function(error){ 
     targetNode.innerHTML = "An unexpected error occurred: " + error.response.status + ": " + error.response.text; 
     } 
    ); 
    } 
); 

क्या मैं अनुरोध का टाइमस्टैंप और स्थिति कोड लोड समारोह में उपलब्ध है परिवर्तित करने के लिए की जरूरत है?

+0

अनुरोध द्वारा उत्पादित टाल करता है। प्राप्त करें() जानकारी अंदर घुसपैठ है? – djna

+0

'request.get()' उत्पादन (जैसा कि @ किनिनापोलके भी कहते हैं) एक 'वादा' वस्तु। मुझे कुछ फ़ंक्शन परिभाषाओं और वहां प्रोटोटाइप कन्स्ट्रक्टर के बगल में कोई भी डेटा नहीं मिल रहा है। –

उत्तर

13

request रिटर्न एक विशेष promise (source):

वादे डोजो/अनुरोध कॉल से लौटे एक अतिरिक्त संपत्ति मानक वादों पर उपलब्ध नहीं है: प्रतिक्रिया। यह गुण एक वादा है कि एक जमे हुए ऑब्जेक्ट (जहां उपलब्ध हो) और अधिक विस्तार में प्रतिक्रिया का वर्णन करने के लिए हल होगा: -

  • विकल्प (क्वेरी स्ट्रिंग संलग्न) अनुरोध बनाने के लिए इस्तेमाल अंतिम URL -

    • यूआरएल विकल्प एक हेडर प्राप्त करने के लिए एक समारोह - जवाब में डेटा
    • डेटा की स्ट्रिंग प्रतिनिधित्व - - जवाब में संभाला डेटा
    • getHeader (headerName) (यदि handleAs निर्दिष्ट किया गया था) वस्तु अनुरोध
    • पाठ बनाने के लिए इस्तेमाल अनुरोध से; यदि कोई प्रदाता हेडर जानकारी प्रदान नहीं करता है, तो यह फ़ंक्शन शून्य वापस आ जाएगा।
  • तो तुम चाहिए श्रृंखला .then इस promise.response के लिए उपयोग सभी aforementioned गुण को पाने के लिए:

    var promise = request.get("{{dataUrl}}dojo/LICENSE"); 
    
    promise.response.then(function(response) { 
        console.log("status", response.status); 
        console.log("url", response.url); 
        console.log("data", response.data); 
    }); 
    

    jsFiddle पर एक काम उदाहरण देखें: http://jsfiddle.net/phusick/6wB2L/

    +0

    धन्यवाद। स्थिति को पुनर्प्राप्त करना इसके साथ पूरी तरह से ठीक काम करता है। हालांकि अनुरोध का टाइमस्टैम्प प्राप्त करने की कोई संभावना नहीं है, है ना? –

    +0

    ऐसा प्रतीत नहीं होता है, लेकिन आप अनुरोध विकल्प में 'टाइमस्टैम्प: (नई तिथि())। ValueOf() 'जोड़ सकते हैं और फिर आप इसे' response.options.timestamp' में देखेंगे (अपडेट जेएसफ़िल्ड देखें)। या प्रत्येक अनुरोध में आपके लिए यह करने के लिए 'अनुरोध/रजिस्ट्री' पर विचार करें। – phusick

    +0

    इससे मुझे भी मदद मिली। धन्यवाद। – hypno7oad