#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
});