我想在网站twitter.com上的推文中搜索“Cricket”字样。问题是如果我使用Phonegap在移动设备中运行此代码,那么它工作正常,但在本地机器中它没有给出任何响应。以下是我的代码:
function appReady(){
var ajax = new XMLHttpRequest();
ajax.open("GET","http://search.twitter.com/search.json?q=Hemant",true);
ajax.send();
ajax.onreadystatechange=function(){
if(ajax.readyState==4 && (ajax.status==200||ajax.status==0)){
var data = JSON.parse(ajax.responseText);
var theResults = data.results;
var theHTML = '';
for(var i=0;i<theResults.length;i++){
alert(theResults[i].text);
}
document.getElementById('main').innerHTML = theHTML;
}
}
}
显示错误的提醒: JSON.parse: unexpected end of data
告诉我哪里出错了?提前谢谢......
答案 0 :(得分:2)
首先,这是一个没有jQuery的可行答案。
<html>
<head>
<script type="text/javascript">
function callTwitterSearch() {
var url = "http://search.twitter.com/search.json?q=Hemant&callback=parseRequest";
//create and inject the script element
var script = document.createElement('script');
script.setAttribute('src', url);
document.getElementsByTagName('head')[0].appendChild(script);
}
function parseRequest(response) {
//This response object is the actual JSON parsed response from twitters api.
alert(response.results.length);//Simply print the result list's size
}
</script>
</head>
<body onLoad="callTwitterSearch()">
<body>
</html>
其次,
在jQuery中,如果指定callback =?,则可以有效地将调用从 json 更改为 jsonp 调用。 jsonp很好地解释了here。
必须从同一个域进行json 调用。 jsonp 调用适用于跨域调用。因为你的本地机器(我假设在这里:))不在twitter域上,你的呼叫失败了。
答案 1 :(得分:1)
您是否尝试过使用Jquery和GetJSON函数?像这样的东西:
function appReady(){
$.getJSON('http://search.twitter.com/search.json?q=Hemant&callback=?', function(json) {
var theHtml = "";
var theResults = json.results;
for(var i=0;i<theResults.length;i++){
theHtml += theResults[i].text;
}
$("#main").html(theHtml);
});
}
小提琴示例Link。 (将appReady()更改为document.ready)
答案 2 :(得分:0)
'<div class="tweet"'
似乎缺少一个结束括号,这可能会破坏HTML字符串的其余部分,导致它的解析方式与您想要的不同。
您在这里滥用eval
。你打算做的是var data = eval(ajax.responseText);
。 然而,这是一个非常糟糕的主意,因为网络攻击者可以用window.close()
或更糟糕的东西替换你的JSON响应。你应该做的是var data = JSON.parse(ajax.responseText);
并使用JSON library用于不支持JSON
对象的浏览器。