2013-05-24 38 views
19

Tôi có một cuộc gọi jQuery Ajax rất đơn giản (bên dưới). Cuộc gọi Ajax thực thi và tôi có thể thấy trong bảng điều khiển Firebug Net mà máy chủ trả về 200 OK và trả về một chuỗi "OK" như nó cần. Tuy nhiên, các chức năng thực hiện và thất bại không cháy! Rất bực bội!jquery ajax thực hiện chức năng không bắn

(The "trước" và "sau khi" cảnh báo DO lửa.)

Để đơn giản (và như là một kỹ thuật gỡ lỗi) Tôi đã tước này xuống để nó hầu hết xương trần nhưng vẫn còn các trình xử lý sẽ không cháy. Tôi không thấy gì ở đây?

postUrl= "/mod/users/check_email/"; 
dataToPost= { email: "[email protected]" }; 

alert("before"); 
$.ajax 
({ 
    type: "POST", 
    url: postUrl, 
    data: dataToPost, 
    done: function() 
    { 
     alert("Success."); 
    }, 
    fail: function() 
    { 
     alert("Sorry. Server unavailable. "); 
    }, 
}); // end Ajax call 

alert("after"); 
+1

Phương pháp ajax không có tùy chọn thực hiện và không thành công. Những gì bạn đang tìm kiếm là thành công và lỗi. –

Trả lời

44

Bạn cần phải chuỗi các chức năng done()fail(), họ không phải là một phần trong những lựa chọn đối tượng được sử dụng trong $.ajax:

$.ajax({ 
    type: "POST", 
    url : postUrl, 
    data: dataToPost 
}).done(function() { 
    alert("Success."); 
}).fail(function() { 
    alert("Sorry. Server unavailable. "); 
}); 

Ngoài ra, như ajax là không đồng bộ, không ngạc nhiên nếu các cảnh báo "sau" xuất hiện trước cảnh báo "thành công".

+0

Cảm ơn rất nhiều !! Điều đó làm việc như một nhà vô địch. Tôi đã chuyển từ thành công cũ và các ví dụ lỗi để thực hiện và thất bại. – misterrobinson

+0

@misterrobinson - Vâng, nó có thể là một litte khó hiểu, nhưng các phương pháp mới không phải là một phần của đối tượng, vì chúng phổ biến hơn nhiều có thể được sử dụng trên bất kỳ trì hoãn/lời hứa nào, như hàm $ .ajax trả về. – adeneo

13

successerror gọi lại có thể được sử dụng theo cách đó. Đối với donefail, bạn cần làm:

$.ajax({ 
    type: "POST", 
    url: postUrl, 
    data: dataToPost, 
}).done(function() { 
    alert("Success."); 
}).fail(function() { 
    alert("Sorry. Server unavailable. "); 
}); 

Hoặc:

$.ajax({ 
    type: "POST", 
    url: postUrl, 
    data: dataToPost, 
    success: function() { 
      //code here 
    } 
}); 
+0

Cảm ơn rất nhiều !! Điều đó làm việc như một nhà vô địch. Tôi đã chuyển từ thành công cũ và các ví dụ lỗi để thực hiện và thất bại. – misterrobinson

5

Cũng u cần datatype: 'json'. Tôi có vấn đề này nơi mà tôi đặt nó vào 'chuỗi' và nó không cháy phương pháp thực hiện

3

Tôi có cùng một thiết lập như thế này:

$.ajax({ 
    type: "POST", 
    url : postUrl, 
    data: dataToPost 
}).done(function() { 
    alert("Success."); 
}) 

và chạy vào cùng một vấn đề: chức năng thực hiện sẽ không cháy. Mặc dù tôi đã cố gắng làm cho nó hoạt động nhiều lần trước đó với cùng một thiết lập, tôi đã mất một lúc để tìm ra những gì đã xảy ra. Sau khi tinh chỉnh xung quanh, tôi thấy rằng nó cũng phụ thuộc vào kiểu dữ liệu được trả về bởi cuộc gọi Ajax. Ban đầu, tôi đã cấu hình cuộc gọi ajax để trả về một số HTML. Hàm đã hoàn thành không hoạt động. Sau khi tôi thay đổi nó trở lại json (với jsonify trong Flask,) nó hoạt động trở lại.

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