2011-09-30 97 views
25

我不太明白如何使用jQuery的ajax函數的回調函數。使用JQuery調用JSONP函數ajax

我在JavaScript下面的代碼:

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上/ Python)的我得到的回調參數的值,並與

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

但隨後作出迴應我在瀏覽器上獲得"Error: jQuery152042227689944248825_1317400799214 is not a function"

處理這個問題的正確方法是什麼?現在我得到了我需要的結果,但是我知道這是不正確的事實正在困擾着我。

+0

我猜POST參數被忽略。據我所知,JSONP只能發出GET請求,因爲實際做的是在頁面的頭部創建一個

12

刪除這一行:

jsonp: 'jsonp_callback', 

或更換本線:

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

,因爲目前你問jQuery來創建callback=?隨機回調函數的名字,然後告訴jQuery的要改爲使用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生成一個隨機函數,而自動生成函數的預定義行爲將僅調用回調 - 在這種情況下的成功函數 - 將json數據作爲參數傳遞。

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


同樣放在這裏,如果您使用$ .getJSON用?佔位符,它將生成一個隨機函數,而自動生成函數的預定義行爲將僅調用回調:

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

「自動生成的函數將只調用回調」,謝謝! – Eddy