Chúng tôi gặp sự cố trong một trong các ứng dụng web sản xuất của chúng tôi, nhưng chỉ trên iPad/iOS8.Lỗi Ajax với JQuery trên iPad
Về cơ bản, trong ứng dụng của chúng tôi, người dùng đang thêm sản phẩm vào giỏ hàng của mình, bằng cách nhấn vào hình ảnh đại diện cho các sản phẩm khác nhau. Khi một hình ảnh được khai thác, sản phẩm được "chọn" và một cuộc gọi không đồng bộ ajax được thực hiện; cuộc gọi này cập nhật giỏ hàng của chúng tôi. Mỗi cuộc gọi không đồng bộ kéo dài khoảng 5-10 giây.
Sự cố xảy ra (nhưng chỉ trên iPad, không phải trên máy tính để bàn Chrome, v.v.) khi người dùng nhấp nhiều lần theo thứ tự. Sau đó, cuộc gọi ajax thứ n thất bại với "lỗi 0". Lưu ý: chúng tôi không thể chặn cuộc gọi ajax thứ hai khi cuộc gọi đã được thực hiện (vì một số câu trả lời sẽ đề xuất), vì giỏ hàng sẽ không được cập nhật đúng cách.
Tôi đã theo dõi xuống hành vi này trong một ví dụ jsFiddle bạn có thể tìm thấy ở đây:
http://jsfiddle.net/oc1ktv6u/30/
function updateCart()
{
var data = {
json: $.toJSON({
text: 'some text',
array: [1, 2, 'three'],
object: {
par1: 'another text',
par2: [3, 2, 'one'],
par3: {}
}
}),
delay: Math.round(Math.random()*12)
}
$.ajax({
url:"/echo/json/",
data:data,
type:"POST",
success:function(response)
{
$(".target").append("+");
},
error:function(xhr, ajaxOptions, thrownError)
{
alert("There was an error in the ajax call: ["+xhr.status+"] ["+thrownError+"]");
}
});
}
câu hỏi chính của tôi là:
- Tại sao điều này xảy ra (và tại sao , rõ ràng, chỉ trên iPad/Safari)?
Kiểm tra chủ đề này cho những hạn chế kết nối http://stackoverflow.com/questions/2940559/iphone-mobile-safari-how-many-max-parallel-http-connections –
Lỗi này có thể được sao chép trong fiddle của bạn. Nhấp vào liên kết và cố gắng làm mới trang jsfiddle.net trên trình duyệt của bạn. Thông báo lỗi của bạn sẽ xuất hiện trên cảnh báo. Tôi nghĩ rằng nó là một cái gì đó khác hơn là kết nối song song. Tôi nghĩ rằng sự chậm trễ gây ra lỗi này. Hãy thử câu hỏi này http://jsfiddle.net/oc1ktv6u/42/ –