Остановите функцию JavaScript, если она не завершена в течение 5 секунд (jquery) - PullRequest
1 голос
/ 05 мая 2011

В настоящее время я использую несколько API для получения данных с других сайтов.Однако иногда API-интерфейсы невероятно медленные (особенно Twitter), и скрипт будет продолжать работать постоянно, потому что Twitter никогда не отвечает.

Мой вопрос заключается в том, как я могу сказать, чтобы функция остановилась, ЕСЛИ ТОЛЬКО ЕСЛИ она незавершено в х количество секунд?Я предполагаю, что это как-то связано с setTimeout (), но я не могу понять это.

Вот пример кода из API погоды Yahoo:

<script type="text/javascript">
    $(function() {

        $.simpleWeather({
            zipcode: '<?= $property_zip ?>',
            unit: 'f',
            success: function(weather) {
                //success
            },
            error: function(error) {
                $("#weathercontent").html('<p>'+error+'</p>');
            }
        });
    });
</script>

Спасибо,Фил

Ответы [ 2 ]

1 голос
/ 05 мая 2011

Вы можете установить глобальное время ожидания для всех запросов jQuery AJAX на 5 секунд. Я полагаю, что это также покрывает запросы JSONP начиная с jQuery 1.5, но, возможно, стоит исследовать.

Вы можете установить один обработчик, для которого установлено время ожидания. Он может быть основан на URL-адресе исходящего запроса. Так что, возможно, для всех звонков в Yahoo, Flickr или Twitter вы можете установить тайм-аут. Приведенный ниже предварительный фильтр запускается перед отправкой каждого запроса AJAX и получает возможность полностью изменить запрос до его отправки.

jQuery.ajaxPrefilter(function(options) {
    if (options.url is not going to my server) { // pseudocode :)
        options.timeout = 5000;
    }
});

Если вы не хотите использовать глобальный обработчик, установите свойство timeout в каждом вызове $.ajax({ .. }), который вы делаете. Это может быть проблематично для сторонних плагинов, таких как simpleWeather, для которых вам придется изменить исходный код, если явно установите время ожидания.

0 голосов
/ 05 мая 2011

Вы имеете в виду, как вы можете отменить запрос ajax, если ответ сервера медленный?Я считаю, что это myAjaxRequest.abort ().Это не то же самое, что остановка функции в середине выполнения.Я не уверен, что есть способ сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...