2011-06-25 118 views
0
function getIDs() { 
alert("1"); 
var title = document.getElementById('title').value; 
alert(title); 
title = "http://www.imdbapi.com/?i=&t=" + title; 
alert(title); 
xmlhttp=new XMLHttpRequest(); 
alert("2"); 
xmlhttp.open("GET",title,true); 
alert("3"); 
xmlhttp.send(); 
alert("4"); 
var imdbData = xmlhttp.responseText; 
alert(imdbData); 
var imdbJSON = JSON.parse(imdbData); 
//document.getElementById('title').value = imdbJSON.Title; 
alert(imdbJSON.Title); 
document.getElementById('imdbid').value = imdbJSON.ID; 
return true; 
} 

我試圖根據它的標題獲取影片的ID,函數調用成功並且警報正確,直到返回「imdbData」的警報,該警報返回一個空白的警報,然後沒有更多的警報發生,我不確定我要去哪裏錯了。任何援助將不勝感激。使用AJAX和JSON時沒有響應

回答

1

您正在異步打開它。爲了使同步,更改此:

xmlhttp.open("GET",title,true); 

要這樣:

xmlhttp.open("GET",title,false); 

上通常考慮的,更好的方式是使其與異步工作:

function getIDs() { 
    alert("1"); 
    var title = document.getElementById('title').value; 
    title = "http://www.imdbapi.com/?i=&t=" + title; 
    xmlhttp=new XMLHttpRequest(); 
    xmlhttp.onreadystatechange=function() { 
     if(xmlhttp.readyState==4) { 
      var imdbData = xmlhttp.responseText; 
      var imdbJSON = JSON.parse(imdbData); 
      document.getElementById('title').value = imdbJSON.Title; 
      document.getElementById('imdbid').value = imdbJSON.ID; 
     } 
    }; 
    xmlhttp.open("GET",title,true); 
    xmlhttp.send(); 
    return true; 
} 

此外,你不能請求來自其他域的頁面。如果您使用的API支持它,或者使用您的Web服務器作爲代理,您可能需要切換到JSONP。

+0

感謝您的回覆,我更改了我的代碼以匹配您的代碼,並添加了一個服務器端頁面來代理我想要的頁面,它現在可以完美運行!然而,當電影標題中有空格導致問題時,我試圖用下面的代碼來替換空格,但它看起來沒有工作。我需要逃避這些優勢嗎? 'title = title.replace(/ \ s/gi,「+」);' –

+0

@Ben:嘗試使用'encodeURIComponent(title)'將其填充到URL中。 – icktoofay

0

您不允許使用JavaScript進行跨站點腳本編寫,這就是爲什麼您無法獲得任何回報。 您需要與發佈AJAX調用時位於同一個域中。

使用服務器端腳本來爲您解析URL。