没有得到XMLHttpRequest的响应

时间:2012-05-23 05:37:16

标签: javascript jquery json cordova

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

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

3 个答案:

答案 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对象的浏览器。