2013-02-20 24 views
10

Tôi có một bài ajax như vậy:jquery ajax thực hiện gọi lại không đáp ứng với 201

$.post("/api/v1/payment_methods/create_credit_card", values) 
.done (response) -> 
    console.log("GOOD JOB") 
.fail (response) -> 
    console.log("Adas") 

Câu trả lời là 201, tuy nhiên, thực hiện dường như không thể nắm bắt nó và thay vào đó nó sẽ thất bại. Tôi nghĩ rằng 201 sẽ được coi là một thành công và sẽ bị bắt bởi thực hiện. Bất kỳ ý tưởng nào về lý do tại sao nó sẽ không hoạt động?

Lưu ý: Đoạn mã trên là trong coffeescript, mà không thực sự ảnh hưởng đến câu hỏi nhưng giải thích cú pháp của tôi

+0

Vâng, tôi đã không được ban đầu được gửi nó bản thân mình. Các api tôi đã được gửi bài sẽ gửi lại một chuỗi nếu nó là một thành công mà đã đóng gói như là một 201. Là hình thức tốt hơn để chỉ cần trả lại một 200 bằng tay sau đó? – justNeph

+1

Tính năng này có hoạt động không nếu bạn thay đổi thành 200? –

+0

Tôi đã thử 200 và vẫn không tốt. Kiểm tra tình trạng trong ajax nhặt nó lên nhưng nó vẫn thất bại – justNeph

Trả lời

8

Vì vậy, chúng tôi đã tìm ra những gì là sai, JSON.parse đã ném một Lỗi Cú pháp - vì vậy các giá trị gửi trong isnt ở định dạng JSON hợp lệ. Áp phích không thể thấy lỗi cú pháp trong chrome, nhưng firebug đã hiển thị lỗi.

Điều này chỉ ra rằng bất cứ khi nào Javascript sẽ ném ngoại lệ, phản hồi vẫn có thể là 200, 201, 202 v.v. - nhưng do lỗi cú pháp, hàm fail() sẽ được kích hoạt.

EDIT - Ngoài ra, bạn có thể sử dụng phản hồi khác, nhiều người dùng 200 - OK, nhưng Id khuyên bạn nên sử dụng 202 - ACCEPTED trong trường hợp này.

+0

Oh xin lỗi, tôi quên đề cập đến mã trên của tôi là trong Coffeescript – justNeph

+0

Tôi đã cố gắng thay đổi nó để trả lại 202 nhưng thất bại vẫn dường như nắm bắt nó – justNeph

+0

Bạn đã sử dụng firebug và nhìn vào Phản hồi? –

2

Nhìn vào nguồn, thành công nên bắn cho bất cứ điều gì giữa 200-300 và 304. Một cách khác là một cách rõ ràng gọi ra statusCode:

$.ajax({ 
    statusCode: { 
    201: function() { 
     console.log("HERE"); 
    } 
    } 
}); 
+0

Tôi có thể kiểm tra mã trạng thái cụ thể theo cách thủ công nhưng tôi muốn sử dụng phương thức đã thực hiện để kiểm tra tất cả các thành công. Có bất kỳ lý do nào tại sao thực hiện sẽ không cháy cho một 201 hoặc 202? – justNeph

+0

Như tôi đã nói, dựa trên nguồn mà nó xuất hiện mà thực hiện nên nắm bắt nó. Tôi đã chỉ đề nghị gọi lại statusCode để xem nó có bắt được chính xác hay không. –