从网站获取JSON并进入Javascript

时间:2013-08-08 19:45:05

标签: php javascript json

我试图通过使用我编写的php程序从Guardian api获取一些JSON数据,例如来自http://content.guardianapis.com/search?q=Tim%20Farron%20mp&page-size=3&format=json这个例子。当我从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!我对这一切都很新,所以提前感谢! :)

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

所以你的问题最有可能是你的json响应由于上面代码中没有的$url输出而无效。所以请为将来做好准备:不要删除过多的代码,以便在问题中发布它,如果它只是用于调试目的的代码。

删除echo $results;

之前和之后的所有输出

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

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

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