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