2015-08-07 5 views
0

Мне нужно сделать запрос к нашему API для проверки флага в записи нашей БД. Я могу сделать этот запрос «n» раз максимальным. Если я не найду правильное значение, я верну ошибку.Асинхронный запрос рекурсивно

Я попытался использовать атрибут JQuery async:false, чтобы сделать запрос async синхронным без эффекта (и я видел, что это устарело).

Другой вариант - сделать запрос AJAX рекурсивно, но AJAX кэширует значение. Я использовал cache:false без эффекта.

Я ищу другие альтернативы (библиотеки узлов, шаблоны, ...), но до сих пор не повезло.

Кто-то решил аналогичную проблему?

UPDATE 1: Мой последний код с рекурсивным вызовом

function checkPay(initialResponse, attempts){ 
if (attempts == 50){ 
    console.log("Something goes wrong after 50 attempts..."); 
    console.log("Let's restart and try again"); 
} else { 
    ajax.jsonRequest('get', 'check_pay', {transactionID: "123FOO"}) //A simple wrapper for $.ajax 
     .done(function(responseStatus){ 
      if (responseStatus.status == "PENDING"){ 
       console.log("Still waiting..."); 
       checkPay(initialResponse, attempts + 1); 
      } else if (responseStatus.status == "ACCEPTED"){ 
       console.log("Yuhuu!!!");      
      } else if (responseStatus.status == "REJECTED") { 
       console.log("Ooops...");      
      } else { 
       console.log("Wat?"); 
      } 
     }).fail(function(error){ 
      console.log("ERROR", error); 
      return "REJECTED" 
     }); 
} 

}

+1

пожалуйста показать код. –

+0

@AxelAmthor сообщение обновлено с кодом;) –

+0

Так в чем же проблема? –

ответ

2

Вы можете предотвратить кэширование путем добавления псевдослучайного параметр для каждого запроса. Браузер и ваш сервер будут считать, что, поскольку ваш запрос содержит разные данные запроса, вы можете запрашивать различную информацию и не будете выполнять кешированный ответ.

Вы просто должны быть в состоянии изменить

ajax.jsonRequest('get', 'check_pay', {transactionID: "123FOO"}) 

To:

ajax.jsonRequest('get', 'check_pay', { 
    transactionID: "123FOO", 
    timestamp: Date.now() 
}) 
+0

'Date.now' возвращает число миллисекунд с 1970 года. Часть' Math.random' бесполезна, или OP делает запросы быстрее, чем 1000/sec – Hacketo

+1

Цель заключалась в том, чтобы предотвратить одновременное использование нескольких клиентов. Тем не менее, они, вероятно, должны быть кэшированы в любом случае, поскольку нужно опросить, пока услуга не будет доступна. – rrowland

+0

Это работает! Прежде всего, это не сработало, и после изучения ajax-библиотеки я вижу, что мы кэшируем обещание и возвращаем его ... теперь исправьте его и хорошо работайте! Благодаря @rrowland –

Смежные вопросы