0

ウェブサイトtwitter.comのツイートで「クリケット」という単語を検索したい。問題は、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);. ただし、ネットワーク攻撃者が JSON 応答を次のようなもの、window.close()またはさらに厄介なものに置き換える可能性があるため、これは本当に悪い考えです。あなたがすべきことは、オブジェクトをサポートしていないブラウザ用のJSON ライブラリvar data = JSON.parse(ajax.responseText);を使用することです。JSON

于 2012-05-23T05:44:46.147 に答える