jsonpCallback函数不起作用

更新1:

我刚刚从jquery 1.4.4升级到1.6.1。 这对原始问题中的脚本有何影响?

原始问题:

正如我测试一样,我做了:

$(document).ready(function() { get_jsonp_feed(); function get_jsonp_feed() { $.ajax({ url: 'http://www.remote_host.co.uk/feed.php', type: 'GET', dataType: 'jsonp', jsonp: 'callback', jsonpCallback: 'jsonpCallback', error: function(xhr, status, error) { alert("error"); }, success: function(jsonp) { alert("success"); } }); } function jsonpCallback(data){ alert("jsonpCallback"); } }); 

我期待获得2个警报,第一个显示success ,第二个显示jsonpCallback 。 但我只获得了第一次警报success 。 为什么第二个警报没有出现?

乔治是正确的,将jsonp param设置为false – 从jQuery 1.5开始(所以,你如何设置它依赖于jQuery版本)。 我不相信您提供的回调名称是作为函数调用的(而是,它是提供给服务器的URL中提供的名称)。 如果您获得成功,那么您已收到数据。 好奇:你有没有设置开发者的主机条目,因为我试图做一些测试,并且http://www.remote_host.co.uk/feed.php不适合我。

你应该改变:

 jsonp: 'callback', 

 jsonp: false 

覆盖默认的回调值。

请参阅: http : //api.jquery.com/jQuery.ajax/

我认为你需要将jsonpCallBack:'jsonpCallback'位更改为jsonpCallBack: function() { alert('boo'); } jsonpCallBack: function() { alert('boo'); }

致所有遇到PHP + JQuery + JSONP问题的朋友

在这里,我使用的是PHP 5.3和Jquery 1.10

 $('#button_submit2').click(function () { prevent_caching = (new Date()).getTime(); $.ajax({ type: 'GET' , url: "http://yoururl.com/webservice.php" , dataType: 'jsonp' //Besides plain xml, the dataType can be html, json, jsonp, script, or text. , jsonp: 'callback' //this will be added in the query as parameter , jsonpCallback: 'jsonp_reply' //this is what ajax call is expecting json to be encapsulated ine ie json_reply(JSON_RESPONSE) , data: { uniq_val: prevent_caching , method_name: "get_all_tasks" , format: 'jsonp' } , cache: false , async: false }) .success(function (rsp) { console.log('success'+rsp); }) .fail(function (xhr, error, thrownError) { console.log('fail status:[' + xhr.status + '] error:[' + thrownError + ']'); }) .always(function () { console.log('complete'); }); });