Я начинающий программист JavaScript/jQuery, поэтому конкретные/исполняемые примеры будут очень оценены.
Мой проект требует использования AJAX для опроса URL-адреса, который возвращает JSON, содержащий либо контент, добавляемый в DOM, либо сообщение { "status" : "pending" }, что указывает на то, что бэкэнд все еще работает над генерацией ответа JSON с содержанием. Идея состоит в том, что первый запрос URL-адреса запускает бэкэнд для создания ответа JSON (который затем кэшируется), а последующие вызовы проверяют, готов ли этот JSON (в этом случае он предоставлен).
В моем script мне нужно опросить этот URL-адрес с 15-секундными интервалами до 1:30 минут и сделать следующее:
- Если запрос AJAX приводит к ошибке, завершите script.
- Если запрос AJAX приводит к успеху, а содержимое JSON содержит { "status" : "pending" }, продолжите опрос.
- Если запрос AJAX приводит к успеху, а содержимое JSON содержит полезный контент (т.е. любой действительный ответ, отличный от { "status" : "pending" }), затем отображать это содержимое, останавливать опрос и завершать script.
Я пробовал несколько подходов с ограниченным успехом, но я понимаю, что они все грязнее, чем им нужно. Здесь скелетная функция, которую я использовал с успехом, чтобы сделать один запрос AJAX за раз, что делает его работу, если я получаю полезный контент из ответа 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'
});
}
Однако эта функция в настоящий момент ничего не делает, пока не получит действительный ответ JSON, содержащий полезный контент.
Я не уверен, что делать в строках, которые являются просто комментариями. Я подозреваю, что другая функция должна обрабатывать опрос и вызывать ajax _
request() по мере необходимости, но я не знаю самого изящного способа для ajax _
request() передавать свои результаты обратно в функцию опроса, поэтому что он может ответить соответствующим образом.
Любая помощь очень ценится! Пожалуйста, дайте мне знать, если я могу предоставить дополнительную информацию. Спасибо!