0

我想在网站 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

告诉我哪里出错了?提前致谢...

4

3 回答 3

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在这里得到了很好的解释。

json调用必须从同一个域进行。 jsonp调用用于跨域调用。由于您的本地机器(我在这里假设:))不在 twitter 域上,因此您的呼叫失败。

于 2012-05-23T08:27:29.493 回答
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);
  });
}​

小提琴示例链接。(将 appReady() 更改为 document.ready)

于 2012-05-23T07:17:09.673 回答
0

'<div class="tweet"'似乎缺少一个右括号,这可能会弄乱您的 HTML 字符串的其余部分,导致它的解析方式与您想要的不同。

你在eval这里滥用。你的意思是var data = eval(ajax.responseText);但是,这确实是个坏主意,因为网络攻击者可能会用类似window.close()甚至更糟糕的东西替换您的 JSON 响应。您应该做的是在不支持该对象的情况下为浏览器var data = JSON.parse(ajax.responseText);使用JSON 库。JSON

于 2012-05-23T05:44:46.147 回答