2010-03-10 8 views
6

$.getJSON() प्रलेखन राज्यों:jQuery स्वचालित रूप से JSONP कॉलबैक क्यों संलग्न नहीं कर रहा है?

If the specified URL is on a remote server, the request is treated as JSONP instead. See the discussion of the jsonp data type in $.ajax() for more details.

jsonp डेटा प्रकार राज्यों (जोर मेरा) के लिए $.ajax() प्रलेखन:

Loads in a JSON block using JSONP. Will add an extra "?callback=?" to the end of your URL to specify the callback.

तो ऐसा लगता है कि अगर मैं एक क्रॉस-डोमेन यूआरएल के साथ $.getJSON() कहते हैं, अतिरिक्त "कॉलबैक =?" पैरामीटर स्वचालित रूप से जोड़ा जाना चाहिए। (दस्तावेज़ीकरण के अन्य भाग इस व्याख्या का समर्थन करते हैं।)

हालांकि, मैं उस व्यवहार को नहीं देख रहा हूं। अगर मैं "कॉलबैक =" नहीं जोड़ता स्पष्ट रूप से, jQuery गलत रूप से एक XMLHttpRequest बनाता है (जो शून्य डेटा देता है क्योंकि मैं प्रतिक्रिया क्रॉस-डोमेन नहीं पढ़ सकता)। अगर मैं इसे स्पष्ट रूप से जोड़ता हूं, तो jQuery सही ढंग से < स्क्रिप्ट > अनुरोध करता है।

यहाँ एक उदाहरण है:

var URL = "http://www.geonames.org/postalCodeLookupJSON" + 
    "?postalcode=10504&country=US"; 

function alertResponse(data, status) { 
    alert("data: " + data + ", status: " + status); 
} 

$.getJSON(URL, alertResponse); 
// alerts "data: null, status: success" 

$.getJSON(URL + "&callback=?", alertResponse); 
// alerts "data: [object Object], status: undefined" 

तो क्या हो रहा है? क्या मैं प्रलेखन को गलत समझ रहा हूं या कुछ भूल रहा हूं?

यह कहने के बिना चला जाता है कि यह एक बड़ा सौदा नहीं है, लेकिन मैं एक वेब एपीआई बना रहा हूं और मैं जानबूझकर कॉलबैक पैरामीटर को "कॉलबैक" पर सेट कर रहा हूं ताकि इसे jQuery उपयोग के लिए अच्छी तरह से तैयार किया जा सके।

धन्यवाद!

(संपादित करें:। मैं jQuery मंचों में cross-posted this यदि आप रुचि रखते हैं)

उत्तर

7

इस प्रयास करें:

var URL = "http://www.geonames.org/postalCodeLookupJSON" + 
    "?postalcode=10504&country=US"; 
function alertResponse(data, status) { 
    alert("data: " + data + ", status: " + status); 
} 
$.ajax({ 
    url: URL, 
    dataType: 'jsonp', 
    jsonpCallback: 'alertResponse', 
}); 
+1

आपके उदाहरण में, आप वास्तव में 'jsonpCallback:' alertResponse'', और हाँ, यह तब तक काम करता है जब मुझे स्पष्ट रूप से "callback =?" पैरामीटर। लेकिन यह '$ .getJSON()' के लालित्य की तुलना में इतना अधिक verbose है। यह अच्छा होगा अगर '$ .getJSON()' दस्तावेज के रूप में काम किया ... –

3

हाँ, मैं तुम गलत समझा लगता है। प्रलेखन के अनुसार $.getJSON$.ajax({datatype: 'json'.... के लिए एक शॉर्टकट है। जब तक आप callback=? पैरामीटर जोड़ते हैं, तब तक यह कभी भी JSONP कॉल नहीं करता है।

+0

हम्म ... क्या मैंने वास्तव में गलत समझा? मैंने जो वाक्य उद्धृत किया है वह बहुत स्पष्ट है: "यदि निर्दिष्ट यूआरएल रिमोट सर्वर पर है, तो अनुरोध को इसके बजाय JSONP के रूप में माना जाता है।" –

+0

आप सही हैं। यह भ्रमित है। –

0

मैं नीचे दिए गए कोड का उपयोग कर रहा,

$ .ajax ({ यूआरएल: यूआरएल, डेटाप्रकार: 'jsonp', सफलता: समारोह (डेटा) { // कुछ करना } त्रुटि: फ़ंक्शन (jqXHR, टेक्स्टस्टैटस, त्रुटि ट्राउन) {}, जेसनपी कॉलबैक: 'login_callback', });

लेकिन, कॉलबैक कभी-कभी यूआरएल के अंत में संलग्न होता है और कभी-कभी आईई में नहीं होता है। क्रोम और एफएफ में काम कर रहा है।

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