簡體   English   中英

使用jQuery AJAX的JSONP的回調函數

[英]Callback function for JSONP with jQuery AJAX

我不太明白如何使用jQuery的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"

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

這就是我對我的所作所為

$(document).ready(function() {
  if ($('#userForm').valid()) {
    var formData = $("#userForm").serializeArray();
    $.ajax({
      url: 'http://www.example.com/user/' + $('#Id').val() + '?callback=?',
      type: "GET",
      data: formData,
      dataType: "jsonp",
      jsonpCallback: "localJsonpCallback"
    });
  });

function localJsonpCallback(json) {
  if (!json.Error) {
    $('#resultForm').submit();
  } else {
    $('#loading').hide();
    $('#userForm').show();
    alert(json.Message);
  }
}

刪除這一行:

jsonp: 'jsonp_callback',

或者替換這一行:

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

因為目前你要求jQuery用callback=?創建一個隨機回調函數名callback=? 然后告訴jQuery你想要使用jsonp_callback

$.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
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM