无法访问 json-p 调用中的数据

Can't access data from json-p call

本文关键字:数据 调用 json-p 访问      更新时间:2023-09-26

我正在尝试从另一个域中的服务器访问一些数据。

所以我有这个php代码:

header('Content-type: application/json');
$callback = $_GET[callback];
echo $callback . '(' . $CIPHERDATA . ')';

在客户端运行的 JavaScript 是这样的

$.getJSON("http://mydomain.gr/zerobin-015/?24c3285?callback=?",function(jsondata){
    alert(jsondata.data);
    alert("hi");
});

警报不会显示。唯一发生的事情是创建一个脚本标签,其中包含我需要但无法访问的所有信息。

<script src="http://mydomain.gr/zerobin-015/?24c3285?callback=jsonp1335048265855&_=1335048265874">
({"data":"{'"iv'":'"smDkNQMt0MIbPABPbAb+xQ'",'"salt'":'"aoFfKV+jHhs'",'"ct'":'"Ns17UQZQN'/ktO2hUW+dPug'"}","meta":{"expire_date":1337635538,"postdate":1335043538}})
</script>

我的 json-p 格式有问题吗?此数据的正确格式是什么,以便可以访问它们?

你做对了。这只是 PHP.
中的运行时错误在 PHP 脚本中,将 $GET[callback] 替换为 $GET['callback'] 。 请注意单引号。

编辑

看看你的URL,我会说你还需要替换这个:

http://mydomain.gr/zerobin-015/?24c3285?callback=?

有了这个:

http://mydomain.gr/zerobin-015/?24c3285&callback=?

注意:第二个 ? 替换为 &。 根据RFC3986,HTTP URL的格式最多需要一个?在任何网址中。 这种情况可能有点混乱,因为尾随?。 在运行时,在$.getJSON()调用中,那个被jQuery替换。 那决赛 ?不会显示在最终到达网址中。所以最后你应该只有一个?.

<小时 />

编辑 2

我刚刚在您的jsonp端点上尝试了HTTP GET。 这是我使用的网址:

http://kasem.gr/vasilis-dev/zerobin-015/?xxxxxBigStringHerexxxx=&callback=foo

xxxxBigStringHerexxx被替换为一串 40 个明显随机的字符和数字。我得到的结果是:

jsonCallback({"data":"{'"iv'":'"smDkNQMt0MIbPABPbAb+xQ'",
                       '"salt'":'"aoFfKV+jHhs'",'"ct'":'"Ns17UQZQN'/ktO2hUW+dPug'"}",
              "meta":{"expire_date":1337635538,"postdate":1335043538}})

这告诉我你的PHP不正确。当我传递"foo"时,它使用 jsonCallback 作为回调函数名称。 此外,由于某种原因,"数据"是一个序列化的 json 字符串。这似乎是一个不必要的步骤。 但功能不匹配是最重要的。

如果不清楚,我建议您多阅读一些有关JSONP的信息。

可能是服务器获得了错误的请求标头,因此没有返回 JSON 响应作为成功语句的一部分。我敢打赌,如果您在 AJAX 调用中为错误添加捕获,您会在那里看到 JSONP 响应。解决此问题的正确方法是确保将正确的 mimetype 标头发送到服务器,以便在正确的上下文中调用返回的 JSONP 回调。

问题出在数据格式上。php 应该提供的 json 字符串是: {"data":"{"iv":"smDkNQMt0MIbPABPbAb+xQ","salt":"aoFfKV+jHhs","ct":"Ns17UQZQNktO2hUW+dPug"}","meta":{"expire_date":1337635538,"postdate":1335043538}}

我使用的 php 代码的错误json_encode同一个字符串上两次。