0

我正在尝试从 Guardian api 获取一些 JSON 数据,就像从http://content.guardianapis.com/search?q=Tim%20Farron%20mp&page-size=3&format=json这个示例中一样 - 通过使用我编写的 php 程序。当我的 javascript 从数据中自行运行时,数据会正常显示,如上所示,但是当 javascript 运行时,它没有从 php 得到任何返回 - 代码卡住了。

PHP(工作)代码:

<?php
//gets url from passed over value
$url = urldecode($_GET['url']);
//gets  contents of url
$results = file_get_contents($url);
header('content-type: text/json');
echo $results;

这是我的 javascript 的一部分,它不起作用 - 因为它卡在第一行,所以没有返回任何响应。

$.getJSON('getSTORY.php?url='+ url2, function(response) {
 console.log(response);
 });

在控制台中,这是一条返回的错误消息(我认为!)

XHR finished loading: "http://yrs2013.bugs3.com/mpapp/getSTORY.php?url=http%3A%2F%2Fcontent.guardianapis.com%2Fsearch%3Fq%3DTim%20Farron%20mp%26page-size%3D3%26format%3Djson". jquery.js:6
//^above was the link using the php. when pressed this shows the required JSON code
send jquery.js:6
x.extend.ajax jquery.js:6
x.(anonymous function) jquery.js:6
x.extend.getJSON jquery.js:6
(anonymous function) script.js:57
c jquery.js:4
p.fireWith jquery.js:4
k jquery.js:6
r

我想知道程序为什么卡住以及如何解决它,以及如何将变量从 php 传递回 javascript!我对这一切都很陌生,所以提前感谢!:)

4

2 回答 2

0

您的代码应该可以正常工作,但将此用作参考:

$(function() { $('#test').bind('click', function(ev) { var url2="http://content.guardianapis.com/search?q=Tim%20Farron%20mp&page-size=3&format=json"; $.getJSON('test.php?url='+ url2, function(response) { console.log(response); $("#results").text(""+JSON.stringify(response)); if(response.response.status == "ok"){ $("#results").text(""); $.each(response.response.results, function(index, element) { $("#results").append($('<div>', { text: "Section: " + element.sectionName })); $("#results").append($('<div>', { text: "Title: " + element.webTitle })); $("#results").append($('<hr>')); }); $("#results").show(); } }); }); }); <form> <input type="button" name="test" id="test" value="test"> </form> <div id="results"> </div>
于 2013-08-08T20:40:55.220 回答
0

所以你的问题很可能是你的 json 响应是无效的,因为$url上面的代码中没有输出。所以请为将来:不要删除太多代码以将其发布在问题中,即使它只是用于调试目的的代码。

删除之前和之后的每个输出echo $results;

你也应该改变的是 json 的内容类型,它是application/json

header('content-type: application/json');

然后为了检查响应是否可以由 JSON 解析器处理,您可以使用jsonlint来验证 json。

于 2013-08-08T21:01:39.823 回答