2012-05-23 88 views
0

我想在twitter.com上的推文中搜索單詞「Cricket」。問題是如果我使用Phonegap在移動設備上運行此代碼,那麼它可以正常工作,但在本地計算機中它不會給出任何響應。以下是我的代碼:JSON.parse: unexpected end of data沒有得到來自XMLHttpRequest的回覆

告訴我在哪裏,我錯了:

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; 
     } 
    } 
} 

顯示錯誤的警告?在此先感謝...

+1

請縮進你的代碼! – ThiefMaster

+0

愚蠢的問題,但從你'本地'的機器,你環繞**'XMLHttpRequest無法加載http://search.twitter.com/search.jsonp?q=Hemant。 Access-Control-Allow-Origin不允許Origin null。'**問題? – Dean

回答

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)

0

'<div class="tweet"'似乎缺少一個左括號,這可能會遺留HTML字符串的其餘部分,導致它被解析的方式不同於您的願望。

您錯誤使用eval此處。你打算做的是var data = eval(ajax.responseText);但是,這真是個壞主意,因爲網絡攻擊者可以用window.close()之類的東西代替你的JSON響應,或者更糟糕的東西。你應該做的是var data = JSON.parse(ajax.responseText);並使用JSON library瀏覽器不支持JSON對象。

+0

我試過簡單沒有那個div但它不工作 – Sky

+0

編輯與更新的答案。 – apsillers

+0

我試圖提醒'簡單的警報(ajax.responseText);'但它顯示空白 – Sky

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中,如果你指定回調=?你有效地改變從JSON電話到JSONP電話。 jsonp很好地解釋了here

json調用必須從同一個域進行。 jsonp調用用於跨域調用。因爲你的本地機器(以及我在這裏假設:))不在twitter域中,所以你的調用失敗了。