2011-09-30 96 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