我尝试了一些基本的例子,但它没有用。我不确定我是否完全理解jsonp,但是我遵循基本教程并且在直观的层面上,我看不出有什么不对。 (当然,我错过了一些东西,因此问题)。
JavaScript代码:
postData = $(this).serialize();
console.log(postData);
$.ajax({
data: postData,
url: 'externaldomain.php',
dataType: 'jsonp',
success: function(data){
console.log(data);
alert('Your comment was successfully added');
},
error: function(){
console.log(data);
alert('There was an error adding your comment');
}
});
PHP代码:
$tag = mysql_real_escape_string($_GET["callback"]);
令人讨厌的部分是,它甚至没有向我显示错误。
有人可以帮忙解决问题吗?
答案 0 :(得分:0)
由于您尚未发布完整或相关的PHP代码,我将假设它看起来像这样
$tag = mysql_real_escape_string($_GET["callback"]);
echo $tag."(";
// print json here
echo ")"
我不确定jquery如何处理jsonp请求,但我以前做的是向DOM添加一个新的脚本标记,看起来像这样
<script> function cb(json) { alert(json); } </script> // (I)
<script src="{url}?callback=cb"></script> // (II)
当加载(II)时,因为我们有一个回调,那么我们在DOM中包含的脚本就像这样
cb({
// json goes here
})
这几乎就像是对我们正在使用的一个名为cb
的函数的函数调用。因此,实现cb
(在(I)中)是很自然的。该实现类似于jQuery&#39}的ajax中的success(data)
函数。它用于使用和操作请求的json
但是我注意到你正在使用jsonp在ajax调用中执行POST请求。不幸的是(根据这个问题How to make a jsonp POST request that specifies contentType with jQuery?)使用JSONP进行POST是不可行的,因为实现的目的。
答案 1 :(得分:-1)
你不能POST
使用JSONP
......它根本不会这样做......
所以你通常只能执行GET请求。您无法执行POST请求。
有关jsonp工作如何看待这篇好文章的详细信息。 jsonp-how-does-it-work
但是有一些方法可以解决这个问题Using PUT/POST/DELETE with JSONP and jQuery。 (对我来说根本没什么用)