2011-12-14 47 views
10

javascript mã, sử dụng jQuery 1.7:jQuery ajax callback không bao giờ gọi

$(function() { 
    $.get('/ajax_dummy', function() { alert('foo'); }) 
}); 

Với Firebug Tôi có thể thấy rằng các yêu cầu HTTP GET được gửi và một "hello world" phản ứng với mã 200 được trả về, vì vậy tất cả mọi thứ dường như khỏe. Nhưng gọi lại không bao giờ được gọi.

Tôi không biết có gì sai; điều này nên đơn giản như vậy, phải không?

+7

'$ .get()' sẽ không hoạt động âm thầm. Chuyển sang sử dụng '$ .ajax()' bằng phương thức 'error' và xem liệu phương thức đó có được chạy hay không. Nếu có, hãy xem các đối số được đưa ra để xem có gì sai. – JAAulde

+1

Loại nội dung nào xuất phát từ trình xử lý ajax? Nếu đó là JSON và phản hồi có JSON không đúng định dạng, nó có thể thất bại mà không cho bạn một lý do rõ ràng tại sao. –

+0

Trong nháy mắt, bạn đang thiếu một ';' ở cuối câu lệnh get? – brheal

Trả lời

8

Bạn không cung cấp dataType để jQuery thực hiện "phỏng đoán thông minh" về loại nội dung từ phản hồi tiêu đề Content-Type mà bạn đã nói là application/json.

Vì vậy, jQuery xử lý phản hồi dưới dạng JSON có nghĩa là nó sẽ cố gắng tự động phân tích cú pháp như vậy, gây ra lỗi.

Do yêu cầu gây ra một lỗi

$.parseJSON("hello world"); 
"Invalid JSON: hello world" 

gọi lại thành công sẽ không rõ ràng bị sa thải.

0

thêm đánh dấu

<div id="error"></div> 

này sau đó thêm xử lý này để bắt lỗi AJAX

$("#error").ajaxError(function(event, request, settings){ 
    $(this).append("<li>Error requesting page " + settings.url + "</li>"); 
}); 

Ngoài ra, bạn có thể viết lại mã ban đầu của bạn như thế này

$.get('/ajax_dummy', function() { 
    alert('foo'); 
}).error(function() { 
    // catch error 
}); 
5

này cung cấp cho một rip :

$.ajax("/ajax_dummy", { 
    dataType: "text", 
    success: function() { 
     console.log("winning."); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     console.log(textStatus); //error logging 
    } 
}); 
0

Điều này là do theo tài liệu của $ .get() Cú pháp nên được như thế xin lưu ý "thành công" tùy chọn này

jQuery.get(url [, data] [, success(data, textStatus, jqXHR)] [, dataType]) 

gọi lại. một cuộc gọi lại thành công được gọi khi yêu cầu thành công dựa trên mã trạng thái (200). nhưng url của bạn có thể không phải là đường dẫn hợp lệ hoặc trả về một số mã trạng thái khác (404) có nghĩa là "không tìm thấy tệp" và do đó xảy ra lỗi. vì vậy phương pháp thành công không bao giờ được gọi.

cũng không có gọi lại "lỗi" được xác định bằng cú pháp của bạn. kiểm tra mã hoàn chỉnh sau đây

$.get("/ajax_dummy", function() { alert('foo'); }) 
    .error(function(d,e) { alert(e); }) 
    .complete(function() { alert("complete"); }); 
Các vấn đề liên quan