我正在尝试从另一个域内的服务器访问某些数据。
所以我有这个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格式有问题吗? 这些数据的正确格式是什么,因此可以访问?
答案 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代码的错误。