2011-09-30 6 views
25

के साथ JSONP के लिए कॉलबैक फ़ंक्शन मुझे समझ में नहीं आया कि JQuery के AJAX funcion के लिए कॉलबैक के साथ कैसे काम करना है।JQuery AJAX

मैं जावास्क्रिप्ट में निम्नलिखित कोड है:

try { 
     $.ajax({ 
      url: 'http://url.of.my.server/submit?callback=?', 
      cache: false, 
      type: 'POST', 
      data: $("#survey").serialize(), 
      dataType: "jsonp", 
      timeout: 200, 
      crossDomain: true, 
      jsonp: 'jsonp_callback', 
      success: function (data, status) { 
       mySurvey.closePopup(); 
      }, 
      error: function (xOptions, textStatus) { 
       mySurvey.closePopup(); 
      } 
     }); 
    } catch (err) { 
     mySurvey.closePopup(); 
    } 

और सर्वर साइड पर (AppEngine/अजगर) मैं कॉलबैक पैरामीटर का मान मिलता है और

self.response.headers['Content-Type'] = 'application/json; charset=utf-8' 
    self.response.out.write(callback + '({"msg": "ok"});') 

लेकिन तब के साथ प्रतिक्रिया मुझे ब्राउज़र पर "Error: jQuery152042227689944248825_1317400799214 is not a function" मिलता है।

इसे संभालने का उचित तरीका क्या है? अभी मुझे परिणाम मिलते हैं जो मुझे चाहिए, लेकिन तथ्य यह है कि मुझे पता है कि यह सही नहीं है मुझे परेशान कर रहा है। क्योंकि वर्तमान में आप callback=? साथ एक यादृच्छिक कॉलबैक फ़ंक्शन नाम बनाने के लिए jQuery पूछ रहे हैं और उसके बाद jQuery से कहा कि आप चाहते हैं

url: 'http://url.of.my.server/submit?callback=json_callback', 

:

jsonp: 'jsonp_callback', 

इस लाइन या बदल देते हैं:

+0

मुझे लगता है कि पोस्ट पैरामीटर नजरअंदाज कर दिया है। जैसा कि मुझे पता है कि JSONP केवल GET अनुरोध कर सकता है क्योंकि वास्तव में आपके पृष्ठ के मुख्य भाग में

12

इस लाइन को हटाना इसके बजाय jsonp_callback का उपयोग करें।

8
$.ajax({ 
     url: 'http://url.of.my.server/submit', 
     dataType: "jsonp", 
     jsonp: 'callback', 
     jsonpCallback: 'jsonp_callback' 
    }); 

jsonp क्वेरी स्ट्रिंग पैरामीटर नाम है कि सर्वर द्वारा स्वीकार किए जाने की, जबकि jsonpCallback JavaScript फ़ंक्शन का नाम हो रहा है परिभाषित किया जाता है ग्राहक पर निष्पादित

url: 'http://url.of.my.server/submit?callback=?' 

प्रश्न चिह्न:
आप इस तरह के यूआरएल का उपयोग करते हैं? अंत में एक यादृच्छिक फ़ंक्शन उत्पन्न करने के लिए jQuery को निर्देश देता है जबकि स्वत: जेनरेट किए गए फ़ंक्शन का पूर्वनिर्धारित व्यवहार केवल कॉलबैक का आह्वान करेगा - इस मामले में सॉस फ़ंक्शन - जेसन डेटा को पैरामीटर के रूप में पास कर देगा।

$.ajax({ 
     url: 'http://url.of.my.server/submit?callback=?', 
     success: function (data, status) { 
      mySurvey.closePopup(); 
     }, 
     error: function (xOptions, textStatus) { 
      mySurvey.closePopup(); 
     } 
    }); 


ही यहाँ जाता है, तो आप के साथ $ .getJSON का उपयोग कर रहे हैं? प्लेसहोल्डर यह जबकि स्वत: जनरेट समारोह के predfined व्यवहार सिर्फ कॉलबैक लागू करेगा एक यादृच्छिक समारोह उत्पन्न करेगा:

$.getJSON('http://url.of.my.server/submit?callback=?',function(data){ 
//process data here 
}); 
+0

देखें "स्वत: जेनरेट किया गया फ़ंक्शन केवल कॉलबैक का आह्वान करेगा", धन्यवाद! – Eddy