Как я могу в Javascript установить ограничение по времени для получения ответа от сервера перед выдачей ошибки?

#javascript #jquery #ajax #xmlhttprequest

#javascript #jquery #ajax #xmlhttprequest

Вопрос:

У меня есть некоторый код Javascript, который получает данные с сервера в вызове jQuery ajax, и, похоже, он всегда запускает обратный вызов успеха, даже если он не получил правильные данные. Обратный вызов ошибки никогда не запускается, как предполагалось. Я хочу установить ограничение по времени для успешного выполнения, поэтому, если данные не будут получены достаточно быстро, выдается ошибка. Как я могу это сделать?

Ответ №1:

Вы пробовали function ? setTimeout();

Использование :

 setTimeout(function(){
    // a function you want to do
}, timeLimit);
//timeLimit : time as miliseconds. 2000 means 2 seconds.
// example : 
setTimeout(function(){
    alert("Hello World");
},2000);
  

Комментарии:

1. Я в замешательстве; Я знаю, как использовать «setTimeout», чтобы что-то произошло через x секунд, но мне нужна функция, которая ожидает появления другой функции в течение определенного периода времени, и если эта функция не выполняется / завершается, ТОГДА действует функция ожидания.

2. javascript является асинхронным. Но я могу порекомендовать вам выполнить это: api.jquery.com/deferred.then

Ответ №2:

Установите timeout свойство для объекта.

 const url = "https://cors-anywhere.herokuapp.com/http://example.com/";

const xhr = new XMLHttpRequest();
xhr.open("GET", url);
xhr.timeout = 5; // This is very small to demo it!
xhr.addEventListener("load", () => console.log("Loaded!"));
xhr.addEventListener("timeout", () => console.log("Timed out!"));
xhr.addEventListener("error", () => console.log("Error!"));
xhr.send();  

Ответ №3:

В ajax:

  $.ajax({
success: function(data){
    //Success code
},
url: "your_url",
error: function(data){
    //Error code
},
timeout: 6000 // sets timeout to 6 seconds
});