2009-02-17 35 views

Trả lời

105

Các tài liệu là ở đây: http://docs.jquery.com/Ajax/jQuery.ajax

Nhưng, để tóm tắt, cuộc gọi ajax mất một loạt các tùy chọn. những cái bạn đang tìm kiếm là lỗi và thành công.

Bạn sẽ gọi nó là như thế này:

$.ajax({ 
    url: 'mypage.html', 
    success: function(){ 
    alert('success'); 
    }, 
    error: function(){ 
    alert('failure'); 
    } 
}); 

tôi đã cho thấy sự thành công và không bị lỗi chức năng chụp không có đối số, nhưng họ có thể nhận đối số.

Hàm lỗi có thể lấy ba đối số: XMLHttpRequest, textStatus và errorThrown.

Chức năng thành công có thể lấy hai đối số: dữ liệu và textStatus. Trang bạn yêu cầu sẽ nằm trong đối số dữ liệu.

+27

Xin lưu ý thông báo deprecation đây: http://bit.ly/nuiyyE. Kể từ jQuery 1.8, các phương pháp thành công, lỗi và đầy đủ sẽ không được dùng nữa thay vì sử dụng: thực hiện, thất bại và luôn luôn. – hitautodestruct

+13

Nếu tôi đọc chính xác, thông báo không dùng nữa * chỉ * áp dụng cho thành công() vv trên đối tượng jqXHR trả về, nhưng không áp dụng cho đối tượng được chỉ định bằng cách sử dụng đối tượng cài đặt. Vì vậy, '$ .ajax (url) .success (...)' sẽ không được dùng nữa và nên sử dụng '$ .ajax (url) .done (...) 'thay thế. '$ .ajax (url, {success: ...}' vẫn ổn, tôi không thấy thông báo phản đối về các mô tả riêng lẻ của các thành viên cài đặt đó. –

+1

Một trong những câu trả lời này là tài liệu mà @hitautodestruct đã đề cập. – MrBoJangles

43

Nếu bạn cần chức năng lỗi, bạn không thể sử dụng các hàm $ .get hoặc $ .post; bạn sẽ cần gọi hàm $ .ajax trực tiếp. Bạn chuyển một đối tượng tùy chọn có thể có các cuộc gọi lại "thành công" và "lỗi".

Thay vì điều này:

$.post("/post/url.php", parameters, successFunction); 

bạn sẽ sử dụng này:

$.ajax({ 
    url: "/post/url.php", 
    type: "POST", 
    data: parameters, 
    success: successFunction, 
    error: errorFunction 
}); 

Có rất nhiều lựa chọn khác có sẵn quá. The documentation liệt kê tất cả các tùy chọn có sẵn.

+5

có bất kỳ điều gì cụ thể được kiểm tra ở phía máy chủ, trong khi các cuộc gọi url.php? như thế nào tôi biết nếu cuộc gọi đã thành công hay sai lầm? tôi có phải trả lại true/false, null hoặc một cái gì đó của các loại? Tôi đang cố gắng này trên thanh chống, và một chút nhầm lẫn những gì của tôi AC lớp tion sẽ trở lại. Như thế nào tôi biết điều gì đó đã thành công hay không .. –

+9

@Kaushik: Nó dựa trên mã trạng thái HTTP được máy chủ trả về. Về cơ bản, bất cứ điều gì ngoại trừ 2xx hoặc 304 (không sửa đổi) được coi là một lỗi. Các điều kiện khác là nếu kết nối hết thời gian hoặc bạn không thể kết nối với máy chủ vì một số lý do. –

+0

Hoàn hảo! điều đó có ý nghĩa. Chúc mừng. –

2

tôi đã tự hỏi, tại sao họ didnt cung cấp trong bản thân jquery, vì vậy tôi thực hiện một vài thay đổi trong tập tin jquery ,,, đây là những khối mã thay đổi:

gốc Mã khối:

post: function(url, data, callback, type) { 
    // shift arguments if data argument was omited 
    if (jQuery.isFunction(data)) { 
     type = type || callback; 
     callback = data; 
     data = {}; 
    } 

    return jQuery.ajax({ 
     type: "POST", 
     url: url, 
     data: data, 
     success: callback, 
     dataType: type 
    }); 

Đã thay đổi Mã khối:

 post: function (url, data, callback, failcallback, type) { 
     if (type === undefined || type === null) { 
      if (!jQuery.isFunction(failcallback)) { 
      type=failcallback 
     } 
     else if (!jQuery.isFunction(callback)) { 
      type = callback 
     } 
     } 
     if (jQuery.isFunction(data) && jQuery.isFunction(callback)) { 
      failcallback = callback; 

     } 
     // shift arguments if data argument was omited 
     if (jQuery.isFunction(data)) { 
      type = type || callback; 
      callback = data; 
      data = {}; 

     } 


     return jQuery.ajax({ 
      type: "POST", 
      url: url, 
      data: data, 
      success: callback, 
      error:failcallback, 
      dataType: type 
     }); 
    }, 

Điều này sẽ giúp người dùng cố gắng gặp lỗi trên $ .Post trong jquery.

Cập nhật: Hoặc có một cách khác để làm điều này là:

$.post(url,{},function(res){ 
     //To do write if call is successful 
    }).error(function(p1,p2,p3){ 
      //To do Write if call is failed 
      }); 
+0

bạn gọi ký hiệu 'post: 'là gì? Nó giống như '$ .post()'? – ahnbizcad

+0

có, nó nằm trong tập tin jquery js – yashpal

28

sử dụng jQuery 1.8 trở lên, nên sử dụng như sau:

var request = $.ajax({ 
    type: 'POST', 
    url: 'mmm.php', 
    data: { abc: "abcdefghijklmnopqrstuvwxyz" } }) 
    .done(function(data) { alert("success"+data.slice(0, 100)); }) 
    .fail(function() { alert("error"); }) 
    .always(function() { alert("complete"); }); 

kiểm tra ra các tài liệu như @hitautodestruct nói .

+0

Điều này có thể được sử dụng cho $ .post và $ .get !! Như được hiển thị trong [tài liệu] (http://api.jquery.com/jQuery.post/) – Brainfeeder

+1

Đây dường như là câu trả lời hay nhất kể từ năm 2014. – TheCarver

+0

vẫn là tốt nhất với v3.x trong năm 2016 – qwertzman

-1

phong cách này cũng có thể:

$.get("mypage.html") 
    .done(function(result){ 
     alert("done. read "+result.length+" characters."); 
    }) 
    .fail(function(jqXHR, textStatus, errorThrown){ 
     alert("fail. status: "+textStatus); 
    }) 
Các vấn đề liên quan