Tôi đang thực hiện một phòng chat phương pháp thăm dò ý kiến dài. Nhưng có vẻ như, khi một cuộc thăm dò dài xảy ra và tôi làm mới trang bằng chrome HOẶC tôi cố gửi một yêu cầu không đồng bộ khác mọi thứ ra ngoài (tức là tôi không thể tải lại tên miền của mình cho đến khi đóng/mở lại trình duyệt).Vấn đề thời gian chờ bỏ phiếu dài
Khách hàng của tôi đang bên là:
$(document).ready(function() {
setTimeout(
function() {
longPollForMessages();
},
500
);
});
function longPollForMessages()
{
$.ajax({
url: url,
dataType: 'json',
success: function(data) {
$('#chat_messages').append('<div>'+data.messages+'</div>');
longPollForMessages();
}
});
}
Và serverside tôi:
while(true) {
$messages = $db->getMessages();
if (!$messages || sizeof($messages)==0) {
sleep(1);
} else {
echo '{"message":'.json_encode($messages).'}';
die();
}
}
Bất kỳ ý tưởng? Giả sử không có lỗi cú pháp.
Hãy thử đặt một 'ngắt;' sau khi 'echo' trong mã serverside –
Cảm ơn bốn câu trả lời của bạn :) Tôi thực sự đã có nhưng quên bao gồm trong mã câu hỏi của tôi. Vì vậy, đó không phải là vấn đề. –
Các bạn, tôi đã tìm ra từ câu hỏi này: http://stackoverflow.com/questions/4457178/long-polling-locking-up-other-ajax-calls - php khóa một phiên nhất định cho đến khi trang được tải xong để cuộc gọi ajax thứ hai không thể đi qua được. Bạn phải giải phóng khóa bằng cách gọi session_write_close(); –