2011-07-07 57 views
6

Tôi yêu cầu một URL với ajax có kết quả trong một mã số tiêu đề HTTP 500. Tôi mong chờ này để kích hoạt chức năng báo lỗi:jQuery callback lỗi ajax không bắn

$.ajax({ 
    url: "http://xxx", 
    dataType: "jsonp", 
    crossDomain: true, 
    success: function(data) { 
     alert('success'); 
    }, 
    error: function() { 
     alert('error'); 
    } 
}); 

này hoạt động trong safari, nhưng thất bại trong chrome và firefox.

Tôi đang làm gì sai?

Đây là 1.4.x jquery mới nhất, vì những lý do tôi không thể nâng cấp lên phiên bản sau ..

Câu trả lời sẽ gửi một mã HTTP 500, kiểu nội dung application/json và nội dung:

jsonp1310063232212 ({ "error": {"reason": "Không tìm thấy người dùng"}})

+0

Tôi không chắc chắn nếu phiên bản này của jQuery có thể phát hiện lỗi JSONP. Thử đặt thời gian chờ cho yêu cầu của bạn. Cuộc gọi lại có thể được gọi nếu không có kết quả nào được nhận sau khi hết thời gian chờ. –

+0

Cảm ơn, nhưng không thay đổi. Không gọi lại lỗi, không gọi lại thành công. Cũng thêm phương thức ajaxError nhưng cũng không được gọi. – Wesley

Trả lời

3

Có vẻ như crossDomain: chưa được thêm cho đến khi jQuery 1.5.

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

crossdomain (thêm 1.5)

Mặc định: false cho các yêu cầu cùng tên miền, đúng đối với yêu cầu cross-domain.

Nếu bạn muốn bắt buộc yêu cầu crossDomain (chẳng hạn như JSONP) trên cùng một tên miền, hãy đặt giá trị của crossDomain thành true. này cho phép, ví dụ, server-side chuyển hướng đến một miền

Giống như Martin Larente đề xuất trong comment của mình, nó có thể là một vấn đề với cách khác nhau trình duyệt hoặc jQuery phát hiện/báo cáo lỗi JSONP.

6

Như đã nêu trong tài liệu JQuery [1] trình xử lý lỗi không được gọi cho tập lệnh miền chéo và yêu cầu JSONP. Nó hoạt động (không phải luôn luôn) trên các phiên bản cũ hơn của JQuery.

tôi giải quyết bằng một plugin nhỏ gọn và hiệu quả, bao gồm xử lý lỗi đẹp: http://code.google.com/p/jquery-jsonp/

Tải về nó và thêm nó vào đầu:

<script src="javascripts/jquery.jsonp-2.2.0.min.js" type="text/javascript"></script> 

Sau đó, bạn có thể sử dụng chức năng $ .jsonp() tương tự với $ .ajax():

$.jsonp({ 
    url: "http://xxx?callback=?", 
    data: { 
     var: 'test' 
    }, 
    cache: false, 
    success: function(data, textStatus) { 
     // ... 
    }, 
    error: function(xOptions, textStatus) { 
     console.log('Error'); 
     // ... 
    } 
}); 

[1] http://api.jquery.com/jQuery.ajax/

+0

Tôi đang mắc kẹt bằng cách sử dụng phiên bản cũ hơn của jquery (1.8.2) và chuyển sang chức năng jsonp đã làm việc cho tôi. –

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