【问题标题】:simple jsonp not working with php server简单的 jsonp 不适用于 php 服务器
【发布时间】:2014-05-16 05:39:33
【问题描述】:

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

烦人的部分是它甚至没有向我显示谷歌的错误。

谁能帮忙解决一下问题?

【问题讨论】:

  • 试试url: 'externaldomain.php?callback=',

标签: php jquery jsonp


【解决方案1】:

你不能 POST 使用 JSONP... 它根本不起作用... 所以你通常只能执行 GET 请求。您不能执行 POST 请求。

有关 jsonp 如何工作的详细信息,请参阅这篇不错的文章。 jsonp-how-does-it-work

为了更清楚: 查看其他 SO 问题 Link1 Link 2

但是有一些限制可以解决这个问题,看看这个Using PUT/POST/DELETE with JSONP and jQuery。 (对我来说根本没有任何作用)

【讨论】:

  • 这没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
  • @DarinKolev JSON-P 通过将脚本标签注入您的文档来工作:它不是传统的 XHR 请求。所以你通常只能执行 GET 请求。您不能执行 PUT 请求。
  • 我一开始并没有发帖。请仔细看问题。
  • 好的,在控制台中记录请求,看看 XHR 请求是如何生成的。您可以通过在 Chrome 中打开控制台并右键单击并检查 LOG 'XMLHttpRequest' 来执行此操作。现在执行您的操作。现在在新标签页中打开这个请求并告诉你所看到的。
【解决方案2】:

由于您尚未发布完整或相关的 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 的 ajax 中的 success(data) 函数。用于使用和操作请求的json

但是我注意到您正在使用 jsonp 沿着 ajax 调用执行 POST 请求。不幸的是(根据这个问题How to make a jsonp POST request that specifies contentType with jQuery?),由于实现目的,使用 JSONP 进行 POST 是不可行的。

【讨论】:

  • 是的,除了该声明之外,它现在只是在 PHP 中回显标签。而且我不明白你所说的功能是什么意思。你能举个例子吗?
  • 当然,我会编辑问题来详细说明
  • 我不是在发帖。变量名称只是 posData,因为我正在修改前面的示例。我试图理解你说它应该如何工作..它没有工作..
  • @user3215569 你确定你的json有效吗?为什么这个例子不起作用似乎很奇怪,我对其进行了测试并且工作完美。在这种情况下,您能否向我们提供您的源代码(js、html、php 和 json)的相关 sn-p
猜你喜欢
  • 2011-09-03
  • 2011-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-03
相关资源
最近更新 更多