2010-06-09 21 views
5

मैं jresp कॉलबैक को greasemonkey स्क्रिप्ट के भीतर jquery का उपयोग करके काम कर रहा हूं।JSONP कॉलबैक विधि को परिभाषित नहीं किया गया है

$.ajax({ 
    url: "http://mydomain.com/MyWebService?callback=?", 
    data: { authkey: "temphash" }, 
    type: "get", 
    dataType: "json", 
    cache: false, 
    success: function(data) { 
     console.log(data); 
    } 
}); 

मेरी वेब सेवा (asp.net) में मैं application/javascript की किसी सामग्री प्रकार के साथ प्रतिक्रिया लौटाएँ हूँ: यहाँ मेरी jQuery है। प्रतिक्रिया सर्वर वास्तव में वापस भेज रहा है है:

jsonp1276109314602({"message":"I'm getting tired of this not working"}) 

jsonp1276109314602 विधि नाम बेतरतीब ढंग से jQuery द्वारा उत्पन्न की जा रही है, और मैं Request.QueryString["callback"]

हालांकि मेरी सफलता समारोह कभी नहीं कहा जाता है और फ़ायरबग साथ यह हथियाने रहा हूँ कंसोल मुझे jsonp1276109314602 is not defined कहने में त्रुटि देता है।

मैं क्या गलत कर रहा हूं?

नोट मैं इस कॉल को क्रेगलिस्ट पेज पर greasemonkey स्क्रिप्ट से बना रहा हूं। यह एक क्रॉस-डोमेन अनुरोध है, लेकिन मैं देख सकता हूं कि अनुरोध वास्तव में सर्वर पर बना रहा है और एक अच्छी प्रतिक्रिया लौटा रहा है, लेकिन किसी भी कारण से जेक्विरी बनाता है कि पंजीकृत कॉलबैक मौजूद नहीं होता है जब प्रतिक्रिया वापस आती है। यह ठीक काम करता है अगर मैं craigslist पेज से फायरबग कंसोल में स्क्रिप्ट चलाता हूं, लेकिन जब यह greasemonkey स्क्रिप्ट से नहीं चलाया जाता है।

+0

आप GreaseMonkey स्क्रिप्ट में jQuery एम्बेड करने या इसे अलग से लोड हो रहा है कर रहे हैं? – James

+0

... या, क्या jQuery पहले से ही उस पृष्ठ पर उपलब्ध है जिसे आप बढ़ा रहे हैं? – James

+0

मुझे इसे greasemonkey स्क्रिप्ट – Micah

उत्तर

2

यह पता चला है कि आपको एक greasemonkey स्क्रिप्ट के अंदर काम करने के लिए कुछ अतिरिक्त बंदर (पन इरादा) करना है।

लंबा उत्तर यहां पाया जा सकता है: jQuery.getJSON inside a greasemonkey user script

संक्षिप्त उत्तर JSONP दृष्टिकोण खाई और अपनी स्क्रिप्ट में इस शामिल करने के लिए है:

// @require http://courses.ischool.berkeley.edu/i290-4/f09/resources/gm_jq_xhr.js 

सुनिश्चित नहीं हैं कि मैं यह सब समझते हैं, लेकिन फिर भी यह एक विजेता की तरह काम करता है और मैं क्रॉस डोमेन बनाने के लिए सक्षम हूँ मेरी लिपि से अनुरोध।

+1

यदि आप रुचि रखते हैं कि 'gm_jq_xhr.js' स्क्रिप्ट कैसे काम करती है, तो आप [एक स्पष्टीकरण] (http://ryangreenberg.com/archives/2010/03/greasemonkey_jquery.php) पढ़ सकते हैं। – Ryan

3

आप पहले से ही करने की कोशिश की:

$.ajax({ 
    url: "http://mydomain.com/MyWebService", 
    data: { authkey: "temphash" }, 
    type: "get", 
    dataType: "jsonp", 
    cache: false, 
    success: function(data) { 
     console.log(data); 
    } 
}); 

docs से:

"jsonp": भार एक JSON ब्लॉक में JSONP का उपयोग कर। एक अतिरिक्त "? कॉलबैक =?" जोड़ देंगे कॉलबैक निर्दिष्ट करने के लिए अपने यूआरएल के अंत तक।

मैंने jQuery के स्रोत कोड की जांच नहीं की है, लेकिन यह संभव है कि कॉलबैक फ़ंक्शन तब तक नहीं बनाया गया जब तक आप डेटा टाइप विकल्प के लिए jsonp निर्दिष्ट नहीं करते।

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