2011-06-25 87 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。