无法从json-p调用访问数据

时间:2012-04-21 22:56:26

标签: javascript jquery cross-domain jsonp getjson

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

所以我有这个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格式有问题吗? 这些数据的正确格式是什么,因此可以访问?

3 个答案:

答案 0 :(得分:2)

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

修改

查看您的网址,我会说您还需要替换它:

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

用这个:

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

注意:第二个?被替换为&amp ;.根据{{​​3}},HTTP URL的格式最多需要一个?在任何URL中。由于尾随,这种情况可能有点混乱? 。那个在$.getJSON()调用中在运行时被jQuery取代。那个决赛?不会出现在最终的网址中。那么到底你应该只有一个? 。


编辑2

我刚刚在你的jsonp端点上尝试了HTTP GET。这是我使用的URL:

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字符串。这似乎是一个不必要的步骤。但功能不匹配是最重要的。

如果不清楚,我建议您RFC3986

答案 1 :(得分:1)

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

答案 2 :(得分:0)

问题出在数据格式上。应该由php提供的json字符串是:  { “数据”: “{” IV “:” smDkNQMt0MIbPABPbAb + xQ的 “ ”盐“: ”aoFfKV + jHhs“, ”CT“: ”Ns17UQZQNktO2hUW + dPug“}”, “元”:{ “EXPIRE_DATE”:1337635538​​, “踵”:1335043538}}

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