Tôi là lập trình viên JavaScript/jQuery mới thành lập, vì vậy các ví dụ cụ thể/thực thi sẽ được đánh giá rất nhiều.jQuery AJAX bỏ phiếu cho phản hồi JSON, xử lý dựa trên kết quả AJAX hoặc nội dung JSON
Dự án của tôi yêu cầu sử dụng AJAX để thăm dò ý kiến URL trả về JSON chứa nội dung được thêm vào DOM hoặc một thông báo {"trạng thái": "đang chờ xử lý") cho biết rằng chương trình phụ trợ vẫn đang hoạt động phản hồi JSON với nội dung. Ý tưởng là yêu cầu đầu tiên cho URL kích hoạt chương trình phụ trợ để bắt đầu xây dựng một phản hồi JSON (sau đó được lưu trữ) và các cuộc gọi tiếp theo kiểm tra xem JSON này đã sẵn sàng chưa (trong trường hợp này nó được cung cấp).
Trong kịch bản của tôi, tôi cần phải thăm dò ý kiến URL này trong khoảng thời gian 15 giây lên đến 1:30 phút, và làm như sau:.
- Nếu yêu cầu kết quả AJAX trong một lỗi, chấm dứt kịch bản .
- Nếu yêu cầu AJAX dẫn đến thành công và nội dung JSON chứa {"trạng thái": "đang chờ xử lý"}, hãy tiếp tục bỏ phiếu.
- Nếu yêu cầu AJAX kết quả thành công và nội dung JSON chứa nội dung có thể sử dụng (tức là bất kỳ phản hồi hợp lệ nào khác ngoài {"trạng thái": "đang chờ xử lý")), sau đó hiển thị nội dung đó, ngừng bỏ phiếu và chấm dứt tập lệnh.
Tôi đã thử một vài phương pháp tiếp cận với thành công hạn chế, nhưng tôi hiểu rằng tất cả chúng đều lộn xộn hơn mức cần thiết. Dưới đây là một chức năng xương Tôi đã sử dụng thành công để thực hiện một yêu cầu AJAX duy nhất tại một thời điểm, mà làm công việc của mình nếu tôi nhận được nội dung có thể sử dụng từ phản ứng JSON:
// make the AJAX request
function ajax_request() {
$.ajax({
url: JSON_URL, // JSON_URL is a global variable
dataType: 'json',
error: function(xhr_data) {
// terminate the script
},
success: function(xhr_data) {
if (xhr_data.status == 'pending') {
// continue polling
} else {
success(xhr_data);
}
},
contentType: 'application/json'
});
}
Tuy nhiên, chức năng này hiện đang làm gì trừ khi nó nhận được phản hồi JSON hợp lệ chứa nội dung có thể sử dụng.
Tôi không biết phải làm gì trên các dòng chỉ là nhận xét. Tôi nghi ngờ rằng một chức năng khác nên xử lý việc bỏ phiếu và gọi ajax _
yêu cầu() khi cần thiết, nhưng tôi không biết cách thanh lịch nhất cho yêu cầu ajax _
() để truyền đạt kết quả của nó trở lại chức năng bỏ phiếu để nó có thể phản hồi thích hợp.
Bất kỳ trợ giúp nào được đánh giá rất nhiều! Vui lòng cho tôi biết nếu tôi có thể cung cấp thêm thông tin. Cảm ơn!
Cảm ơn, Joel! Điều này làm việc cho tôi - tôi đánh giá cao nó. – Bungle
Liệu setTimeout() có chặn việc thực hiện phần còn lại của tập lệnh trong thời gian trễ không? –
No. 'setTimeout()' chỉ định một khoảng thời gian trong tương lai cho một khối mã được thực thi. Phần còn lại của tập lệnh sẽ chỉ bị chặn khi hết thời gian chờ và mã được chạy. – Joel