无法访问 json-p 调用中的数据
Can't access data from json-p call
我正在尝试从另一个域中的服务器访问一些数据。
所以我有这个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同一个字符串上两次。
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- Meteor Router数据函数被调用两次
- node.js请求数据事件未在CORS ajax调用中触发
- 使用AJAX调用将GeoJSON数据拉入传单
- 使用angularjs中的rest调用通过id获取数据
- Jquery:对返回JSON数据的php脚本的Ajax调用
- AJAX调用并在Node中获取返回数据
- 为什么在调用父构造函数时在[]中发送数据
- 如何使用var名称调用JSON数据
- 我们可以用参数对象集合而不是原始数据来调用JavaScript collection.reduce()方法吗
- AJAX调用后使用JavaScript处理数据(CakePHP 2.6.x)
- 在javascript中调用函数/对象引用时,可容纳任何数据类型
- Ajax调用,发送图像和其他数据
- 内容和数据调用密集型钛矿中的应用程序
- 在.NET MVC JQuery中,Ajax将downloadod数据调用为.csv
- 使用数据库中的数据调用图像,并将其用作传单中的标记图像
- 尝试从下拉列表中的数据调用函数
- 剑道移动JSON数据调用
- 将MySQL数据调用到下拉列表中
- 从异步服务器端数据调用呈现ReactJS