2012-04-02 73 views
5

我正在使用位於此處的IMDb API v2.0,並且我決定對其進行測試。我不能。我認爲這是來自外部網站的跨瀏覽器AJAX請求,但我不知道任何其他方式。例如,這裏的測試在imdbapi avatar使用jQuery的外部API GET()請求

請參閱?這是我的代碼。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 

<head> 
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> 


    <title>IMDB api</title> 

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script> 

    <script type="text/javascript"> 
    $(document).ready(function() 
{ 
    $('#movie').keyup(function() { 

     var yourMovie = $("#movie").val(); 
    $("#debug").append("You are searching for ... "+yourMovie+"\n"); 

dataString = "t=Avatar"; 

$.ajax({ 
type: "GET", 
url: "http://www.imdbapi.com/", 
cache: false, 
data: dataString, 

success: function(html){ 
//$("#more").after(html); 
alert("Success!"); 
} 

}); 
}); 
}); 
</script> 

</head> 
<body> 


<form action="#" method="get" enctype="text/html" > 
<input type="text" id="movie" maxlength="50" /> 

</form> 

<div id="other"> 
    Trigger the handler 
</div> 
<br /> 
<textarea id="debug" style="width: 500px;height:150px;border:1px solid black;font-face:typewriter;"></textarea><br /> 
<textarea id="more" style="width: 500px;height:150px;border:1px solid red;font-face:typewriter;"></textarea> 

</body> 
</html> 

我正在使用谷歌瀏覽器。

下面是我工作:

<script type="text/javascript"> 
    $(document).ready(function() 
{ 
    $('#movie').keyup(function() { 

     var yourMovie = $("#movie").val(); 
    $("#debug").append("You are searching for ... "+yourMovie+"\n"); 

dataString = "callback=?&t=Avatar"; 

$.getJSON('http://www.imdbapi.com/', dataString, function(html){ 
//$("#more").after(html); 
alert("Success!"); 
}); 


}); 
}); 
</script> 

回答

3

替換:

$.ajax({ 
type: "GET", 
url: "http://www.imdbapi.com/", 
cache: false, 
data: dataString, 

success: function(html){ 
//$("#more").after(html); 
alert("Success!"); 
} 
}); 

隨着

$.getJSON('http://www.imdbapi.com/?' + dataString, function(json_data){ 
alert(JSON.stringify(json_data)); 
}); 
+0

將無法​​正常工作,它是跨域 – 2012-04-02 22:47:17

+0

啊哈,我現在明白了。謝謝。我知道我使用的是錯誤的。 – nn2 2012-04-02 22:47:20

+1

@Topener getJSON工作的X域。 [RTFM](http://api.jquery.com/jQuery.getJSON/)。 – iambriansreed 2012-04-02 22:57:39

0

您可以使用jQuery運行跨域的Ajax。在調用點設置crossDomain選項:

http://api.jquery.com/jQuery.ajax/

跨域(增加1.5)Boolean默認值:假的同域請求, 真正的跨域請求。如果你想強制跨域 請求(如JSONP)在相同的域, 跨域的值設置爲true

編輯 -

其實,究竟是什麼問題?我試過這個,它會正確返回Json。

http://jsfiddle.net/7VcUJ/

響應例如:

HTTP/1.1 200 OK緩存控制:無緩存雜注:無緩存內容類型: text/html的; charset = utf-8過期時間:-1服務器:Microsoft-IIS/7.0 X-AspNet-Version:4.0.30319 X-Powered-by-ASP.NET日期:4月2日,星期一 2012 22:28:14 GMT內容-Length:618

{「Title」:「Avatar」,「Year」:「2009」,「Rated」:「PG-13」,「Released」:「Dec Dec 12:18 Dec 2009」,「Genre」 「行動,冒險,幻想,科幻」,「導演」:「詹姆斯 卡梅隆」,「作家」:「詹姆斯卡梅隆」,「演員」:「薩姆沃辛頓,佐伊 薩爾達納,西格妮韋弗,米歇爾羅德里格斯」 「劇情」:「截癱 海洋派遣到月球潘多拉在一個獨特的使命成爲撕毀 之間遵循他的命令和保護他的世界,他覺得是他的 家。」,「海報」:「http://ia.media -imdb.com/images/M/MV5 BMTYwOTEwNjAzMl5BMl5BanBnXkFtZTcwODc5MTUwMw @@ ._ V1_SX320.jpg「,」Runtime「:」2 hrs 42 mins「,」Rating「:」8.1「,」Votes「:」386930「,」ID「:」tt0499549「,」Response「: 「True」}

+0

嗯,它仍然無法爲我工作。我用undefined類型取消它:i.imgur.com/yWaF6.png – nn2 2012-04-02 22:43:22

3

這是一個跨域的AJAX調用,因此您需要一個回調。 jQuery使這非常簡單,只需將?callback=?添加到您的網址。

url: "http://www.imdbapi.com/?" + dataString + "&callback=?" 

跳過data = dataString在這種情況下,使得它更容易(我發現)。

試試這個,進一步繼續它:

$.getJSON("http://www.imdbapi.com/?" + dataString + "&callback=?").success(function(data){ 
    console.log(data); // will contain all data (and display it in console) 
}) 

這是一樣的:

$.ajax({ 
type: "GET", 
url: "http://www.imdbapi.com/?"+dataString+"&callback=?", 
dataType: 'JSONP' 
success: function(data){ 
    console.log(data); 
} 
+0

嗯,它仍然不適合我。我得到它取消與undefined類型:http://i.imgur.com/yWaF6.png – nn2 2012-04-02 22:39:24

+0

添加額外的信息,我的回答 – 2012-04-02 22:45:39

0

添加callback參數的URL中使用JSONP:

dataString = "t=Avatar&callback=?"; 

使用$將導致jQuery爲你自動生成一個回調函數並自動處理響應。

推薦閱讀:What is JSONP all about?