【问题标题】:$.getJSON used by desktop widget does not request URL from browser桌面小部件使用的 $.getJSON 不会从浏览器请求 URL
【发布时间】: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


【解决方案1】:

javascript 部分肯定有问题。我不知道您所说的 Desktop Widget 是什么意思。
您的 javascript 没有从您的 JSON 响应中输出任何内容。让我们通过打印 data.a 来改变它,这应该是您响应的变量:

$.getJSON(url, function(data) {
       output+= "<p> my JSON response: " + data.a + " </p>";
       document.getElementById('demo').innerHTML = output;
       //whenDone (output);
});  

说实话,我不知道你想用whenDone(output) 实现什么。这是自己写的函数吗?
您意识到 $.getJSON() 是一个 jQuery 函数 - 所以请确保在代码中包含 jQuery。并确保您的脚本位于&lt;script&gt;&lt;/script&gt; 标签中。

【讨论】:

  • 我已经编辑了我的代码。我使用“输出”是因为我有一个调用 $.getJSON 的外部函数,但我没有在此处显示它以使事情变得更简单。因此,它没有以我编写代码的方式使用。您能否删除您的评论以保持清晰?对不起,谢谢。
  • @Marievi 不,这不是评论。这是一个答案。您应该向我们提供更多您的原始代码,以便我们能够为您提供帮助 - 而不是从您的原始代码中删除更多内容。顺便说一句,您的控制台中没有任何错误吗?并确保您在控制台中检查了“保留日志”(或类似内容),因此刷新时不会丢失日志条目。
  • 之所以让你抹掉你的答案,是因为我误写了“输出”变量,所以我编辑了我的代码,这里没有用到。我相信问题出在我用于创建 JSON API 的 PHP 代码中。我不能使用 console.log() 因为我的代码结果不能在浏览器中测试(如在网页中),而是直接在没有控制台的小工具中测试。如果您通过网络选项卡指的是控制台,它不会显示任何内容。
猜你喜欢
  • 1970-01-01
  • 2016-10-26
  • 2019-05-06
  • 1970-01-01
  • 1970-01-01
  • 2011-07-21
  • 1970-01-01
  • 1970-01-01
  • 2014-11-08
相关资源
最近更新 更多