2012-04-23 42 views
10

Tôi đang sử dụng phương thức $.ajax của jQuery để tìm nạp dữ liệu từ dịch vụ web tương thích JSONP và theo phản hồi và hiển thị dữ liệu nhận được trong HTML của tôi, mọi thứ có vẻ hoạt động tốt. Tuy nhiên, tôi đã không thể có được lời gọi thành công của phương pháp ajax để bắn. Điều thậm chí còn xa lạ hơn nữa là ngay cả khi tôi nhận được phản hồi hợp lệ từ dịch vụ, lỗi gọi lại luôn được kích hoạt.Gọi lại thành công jQuery ajax không bắn

Dưới đây là một ví dụ về một hàm js đơn giản, tôi thực hiện để kiểm tra điều này:

function doJsonp() 
{ 
    $.ajax({ 
     url: "http://example.com/api/service?callback=blah", 
     dataType: "jsonp", 
     crossDomain: true, 
     success: function() { console.log("success"); }, // This is never fired 
     error: function() { console.log("error"); } // This is always fired 
    }); 
} 

và chức năng khớp callback:

function blah(data) 
{ 
    console.log(data); // This is called properly 
} 

Từ đọc câu hỏi tương tự ở đây trên SO và các nơi khác, nó có vẻ như điều này thường được gây ra bởi dịch vụ trả về JSON không xác thực. Đối với mục đích của tôi, tôi đang sử dụng một dịch vụ web trong nhà nhưng đã cố gắng dịch vụ JSONP khác nữa, chẳng hạn như những người được cung cấp bởi Flickr, ví dụ:

http://api.flickr.com/services/feeds/[email protected]&lang=en-us&format=json&jsoncallback=blah

Cả JSON từ Flickr của dịch vụ và mỏ Validate sử dụng jsonlint để không có vẻ là vấn đề xa như tôi có thể nói.

Khi tìm kiếm giải pháp cho vấn đề này, tôi đã thử sử dụng một plugin jQuery có tên là jquery-jsonp, được tìm thấy tại http://code.google.com/p/jquery-jsonp/. Này thay thế $.ajax gọi jQuery với riêng $.jsonp nên mã trên trông như thế này:

function doJsonp() 
{ 
    $.jsonp({ 
     url: "http://example.com/api/service?callback=blah", 
     success: function() { console.log("success"); }, 
     error: function() { console.log("error"); } 
    }); 
} 

Tuy nhiên, kết quả là giống nhau và gọi lại thành công không bao giờ cháy. Bất kỳ sự giúp đỡ hoặc di chuyển theo hướng đúng sẽ được đánh giá cao!

+1

phản ứng máy chủ là gì? Bạn có thể tìm thấy nó trong các công cụ phát triển như Dragonfly (opera), Firebug (FireFox), Công cụ dành cho nhà phát triển (Chrome) –

+0

url: "http://example.com/api/service?callback=blah"! = Tên hàm của bạn bleh(). Có thể đó là một lỗi đánh máy? – mayrs

+0

@BartoszGrzybowski Trạng thái phản hồi của máy chủ là 200 OK – Limescale

Trả lời

4

xác định gọi lại chức năng thông qua jsonpCallback -option, không bên trong url:

function doJsonp() 
{ 
    $.ajax({ 
     url: "http://api.flickr.com/services/feeds/[email protected]&lang=en-us&format=json&jsoncallback=?", 
     dataType: "jsonp", 
     crossDomain: true, 
     jsonpCallback:'blah',//<<< 
     success: function() { console.log("success"); }, 
     error: function() { console.log("error"); } 
    }); 
} 
Các vấn đề liên quan