2012-04-02 37 views
5

Tôi đang sử dụng IMDb API v2.0 nằm ở đây và tôi đã quyết định thử nghiệm nó. Tôi không thể. Tôi nghĩ rằng đó là beacuse của trình duyệt qua AJAX yêu cầu từ các trang web bên ngoài .. nhưng tôi không biết bất kỳ cách nào khác. Ví dụ: đây là thử nghiệm tại imdbapi avatarAPI bên ngoài GET() yêu cầu sử dụng jQuery

See? Đây là mã của tôi.

<!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> 

Tôi đang sử dụng Google Chrome.

Đây là những gì làm việc cho tôi:

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

Trả lời

3

Thay thế:

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

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

Với

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

sẽ không hoạt động, nó là tên miền chéo –

+0

Aha, tôi đã nhận nó ngay bây giờ. Cảm ơn. Tôi biết tôi đã sử dụng sai. – nn2

+1

@Topener getJSON hoạt động x-domain. [RTFM] (http://api.jquery.com/jQuery.getJSON/). – iambriansreed

0

Bạn có thể chạy chéo miền Ajax với jQuery. Đặt tùy chọn crossDomain tại địa điểm cuộc gọi:

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

crossdomain (thêm 1.5) Boolean Mặc định: false cho các yêu cầu cùng tên miền, đúng đối với các yêu cầu cross-domain Nếu bạn muốn buộc một crossdomain yêu cầu (ví dụ như JSONP) trên cùng một tên miền, thiết lập giá trị của crossdomain true

Edit-

Thực ra, vấn đề của bạn chính xác là gì? Tôi đã thử điều này và nó trả về Json đúng cách.

http://jsfiddle.net/7VcUJ/

đáp ứng dụ:

HTTP/1.1 200 OK Cache-Control: no-cache pragma: no-cache Content-Type: text/html; charset = utf-8 Hết hạn: -1 Máy chủ: Microsoft-IIS/7.0 X-AspNet-Phiên bản: 4.0.30319 X-Powered-By: ASP.NET Ngày: Thứ Hai, 02 Tháng Tư 2012 22:28:14 GMT Nội dung -Length: 618

{"Title": "Avatar", "Year": "2009", "Rated": "PG-13", "Release": "18 Dec 2009", "Thể loại": "Hành động, Phiêu lưu, Tưởng tượng, Sci-Fi", "Đạo diễn": "James Cameron", "Người viết": "James Cameron", "Diễn viên": "Sam Worthington, Zoe Saldana, Sigourney Weaver, Michelle Rodriguez", "Lô": "Một paraplegic biển gửi đến mặt trăng Pandora trên một nhiệm vụ duy nhất bị rách giữa theo đơn đặt hàng của mình và bảo vệ thế giới mà ông cảm thấy là nhà của mình là .", "Poster": "http://ia.media -imdb.com/images/M/MV5 BMTYwOTEwNjAzMl5BMl5BanBnXkFtZTcwODc5MTUwMw @@ ._ V1_SX320.jpg "," Thời gian chạy ":" 2 giờ 42 phút "," Xếp hạng ":" 8.1 "," Phiếu bầu ":" 386930 "," ID ":" tt0499549 "," Trả lời ": "True"}

+0

Hmmm, nó vẫn không làm việc cho tôi. Tôi nhận được nó được gọi tắt với loại không xác định: i.imgur.com/yWaF6.png – nn2

3

Đây là cuộc gọi AJAX tên miền chéo, do đó bạn cần gọi lại. jQuery làm cho điều này thực sự dễ dàng, chỉ cần thêm ?callback=? vào url của bạn.

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

Bỏ qua data = dataString trong trường hợp này, giúp dễ dàng hơn (tôi tìm thấy).

Hãy thử điều này, và tiếp tục vào nó hơn nữa:

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

Đây là giống như:

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

Hmmm, nó vẫn không làm việc cho tôi. Tôi nhận được nó được gọi tắt với loại không xác định: http://i.imgur.com/yWaF6.png – nn2

+0

thêm thông tin vào câu trả lời của tôi –

0

Thêm một tham số callback vào URL để sử dụng JSONP:

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

Sử dụng $ sẽ khiến jQuery tự động tạo chức năng gọi lại cho bạn và tự động xử lý phản hồi.

khuyến nghị đọc: What is JSONP all about?

Các vấn đề liên quan