简单的jsonp无法使用php服务器

时间:2014-04-04 04:47:32

标签: php jquery jsonp

我尝试了一些基本的例子,但它没有用。我不确定我是否完全理解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"]);

令人讨厌的部分是,它甚至没有向我显示错误。

有人可以帮忙解决问题吗?

2 个答案:

答案 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

更清晰: 请参阅其他问题Link1 Link 2

但是有一些方法可以解决这个问题Using PUT/POST/DELETE with JSONP and jQuery。 (对我来说根本没什么用)