【发布时间】:2016-05-27 09:17:09
【问题描述】:
我正在开发一个桌面小部件(在 Windows 7 中)。我创建了一个 API(使用 PHP),小部件需要从中请求数据。 API 是 JSON 格式,通过在浏览器中输入 URL,我得到了我需要的数据,即
{"a": "b"}
我还检查了http://jsonlint.com 中的 JSON API,这表明 JSON 是正确的。
我用来从 URL 获取 JSON 的 javascript 代码如下:
$.getJSON(url, function(data) {
... printings ...
});
但我没有得到任何结果(而 URL 在键入时显示正确的结果)。当我打开网络选项卡时,我可以看到甚至没有请求 URL!服务器请求没有返回任何东西,就像我没有请求网址一样。
但是,当我键入不同的 URL(不是我创建的,而是我的公司使用 Python 创建的)时,小部件会获取数据。我想我的 API 因此有问题,但我不知道是什么。在创建 API 的 PHP 代码中,我拥有
<?php
....
$str = 'b';
....
$results = array();
$results['a'] = $str;
$encoded = json_encode($results);
echo $encoded;
return $encoded;
?>
我得到了上面显示的 JSON。有什么想法吗?
【问题讨论】:
-
output与回调函数function(data)有什么关系? -
@Sumit 对不起,我有另一个以“输出”为参数的外部函数。这里没有按照我写问题的方式使用,我正在编辑代码,谢谢。
-
@Marievi 您的浏览器本身就是小部件或小工具 - 有点。并且您正在向其他地方的网络服务器发送请求(我猜)。所以你需要使用 JSONP 以使其跨域兼容。否则您的正常 JSON 请求将被阻止,因为正常的
ajax请求仅在位于同一域中时才有效。 -
如果 URL 包含字符串
"callback=?"(或类似的,由服务器端 API 定义),则请求将被视为 JSONP。 - 取自 @ 987654322@. -
@Marievi 但那是在你的浏览器中,我猜。并且您很可能在您在浏览器中打开的同一域中的同一网络服务器上拥有一个测试脚本?但是如果您使用小部件对其进行测试,那么您有一个本地脚本正在尝试向服务器发送请求。这就是为什么你需要 JSONP,恕我直言。
标签: javascript php getjson