我正在开发一个应用程序,它会生成一个javascript代码,在网站上显示一个小部件。当通过窗体小部件表单提交数据时,它会使用jQuery ajax函数将数据发布到服务器。
问题是我正在使用成功回调,如果我将小部件放在一个位于不同主机上的网站上,它将永远不会被触发。我知道这是因为javascript阻止了跨域ajax并且我应该使用jsonp,但是我想知道为什么成功事件没有被触发,如果数据被正常发送到服务器?
以下是代码:
$.ajax({
type: 'POST',
url: report_url,
data: $(form).serialize(),
success: function() {
alert("success called!");
}
});
用jsonp做同样事情的最佳方法是什么?我有点困惑,如果我应该用jsonp和如何做,因为它需要定义一个jsonp回调参数。
感谢您的帮助
答案 0 :(得分:0)
嗯,您可以使用JSONP
:
现场演示: http://jsfiddle.net/5CUk2/
(请检查浏览器控制台)
$(function() {
//Example using flickr API
var diffDomainUrl = 'http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=mycallback&tags=monkey&tagmode=any&format=json';
$('#jsonpbtn').on('click', function() {
$.ajax({
url: diffDomainUrl,
dataType: 'jsonp',
data: {},
success: function (data, textStatus) {
console.log(textStatus);
console.log(data);
},
jsonpCallback: 'mycallback'
});
});
});
顺便说一下,您可以尝试其他可能的“方式”来制作cross-domain
请求,看看这个,也许可以提供帮助: