Обработка тайм-аута getJSON

Я использую функцию jQuery getJSON() . Эта функция получает данные без проблем. Но иногда ждут, жду ожидания ... И моя загрузочная панель, показывающая загрузку загружаемого груза в центр страницы.  Таким образом, функция jQuery ajax() имеет переменную тайм-аута. Но я хочу использовать функцию getJSON . И я думаю, что я могу использовать функции ajaxStart() и ajaxStop() . Но как?

$('.loadingDiv')
    .hide()
    .ajaxStart(function() {
        $(this).fadeIn();
        setTimeout("throw '';",15000) //i used this but didn't work
        setTimeout("return;",15000) //i used this but didn't work
        setTimeout("abort();",15000) //i used this but didn't work.(Abort all ajax events)
    })
    .ajaxStop(function() {
        $(this).fadeOut();
    });
19
Когда вы передаете строки в setTimeout (которые вы должны never делать), это eval s в глобальной области. Таким образом, вы не можете вернуть из него.
добавлено автор Rocket Hazmat, источник
@Asad: OP говорит, что он хочет использовать $. GetJSON вместо $. Ajax .
добавлено автор Rocket Hazmat, источник
Что не так с использованием более явной функции $. Ajax ? Это может быть больше строк кода, но это помешает вам создавать такие проблемы.
добавлено автор Rocket Hazmat, источник
@ lethal-guitar: Я знаю это. Я просто повторил повторение, было сказано в вопросе.
добавлено автор Rocket Hazmat, источник
Вы должны установить тайм-аут при вызове .ajax
добавлено автор Asad Saeeduddin, источник
@RocketHazmat: $. GetJSON - это просто оболочка для $. Ajax . См. Руководство: api.jquery.com/jQuery.getJSON
добавлено автор lethal-guitar, источник
@Rocket Hazmat Возможно, OP не понимал, что .getJSON - это то же самое, что и вызов .ajax . В любом случае вызов .getJSON не позволяет использовать параметр timeout
добавлено автор renab, источник
Спасибо за ваши ответы ...
добавлено автор pheaselegen, источник

6 ответы

getJSON() returns a promise on which you can call the abort function :

var p = $.getJSON(..., function(){ alert('success');});
setTimeout(function(){ p.abort(); }, 2000);

EDIT : but if your goal is just to abort if it takes too much time, then lethal-guitar's answer is better.

15
добавлено
но это не поможет или не будет? время, которое берется для getJSON , - это сборы, ожидающие завершения сценария на стороне сервера, и если это занимает время, то прерывание запроса, а затем отправка другого не поможет
добавлено автор Muhammad Omer Aslam, источник
+1, потому что он позволяет OP использовать .getJSON , а не .ajax
добавлено автор renab, источник
Да, истинный ответ - использовать Ajax. Но я тоже написал в своем вопросе. Во всяком случае, этот ответ был полезен. Благодарю.
добавлено автор pheaselegen, источник

getJSON() is just a shorthand for the following:

$.ajax({
    dataType: "json",
    url: url,
    data: data,
    success: success
});

So you could use $.ajax() and specify the timeout option as desired. See also: http://api.jquery.com/jQuery.getJSON/

15
добавлено
+1 это, вероятно, более полезно для OP, чем мой ответ.
добавлено автор Denys Séguret, источник
Существует аналогичный ответ здесь , который может быть расширен для добавления тайм-аута для jQuery ajax-вызова.
добавлено автор shasi kanth, источник
+1 точно, что я думал (отсюда сходство в наших ответах, вы были быстрее на ничью)
добавлено автор renab, источник

Как упоминалось в смертельной гитаре, функция getJSON() является просто сокращением для $. Ajax() . Если вы хотите определить, произошел ли тайм-аут, а не фактическая ошибка, используйте приведенный ниже код.

var request = $.ajax({
    dataType: "json",
    url: url,
    data: data,
    success: function( ) { },
    timeout: 2000
}).fail( function( xhr, status ) {
    if( status == "timeout" ) {
       //do stuff in case of timeout
    }
});
10
добавлено
@noahnu Спасибо. исправленный.
добавлено автор Bruno, источник
Typo: == not =
добавлено автор noahnu, источник

Там всегда есть ядерный путь:

//Set AJAX timeout to 10 seconds
$.ajaxSetup({
  timeout: 10*1000
});

Это установит все запросы AJAX, которые ваша программа делает (даже через $ .getJSON), чтобы иметь время из 10 секунд (или что у вас есть).

3
добавлено
Я пробовал это, используя 1) $ .getJSON с URL-адресом и 2) $ .ajax с атрибутами только «url» и «dataType». $ .ajax уважает глобальный тайм-аут (устанавливается с использованием фильтра с потоком нити на моем локальном сервере), а $ .getJSON - нет. Похоже, это может быть ошибка в $ .getJSON.
добавлено автор Jasman, источник

функция setTimeout выполняет набор кода после заданного количества milisecons в глобальной области.

Функция getJSON (по документации jQuery здесь http://api.jquery.com/jQuery.getJSON/ ) является сокращением для:

$.ajax({
  dataType: "json",
  url: url,
  data: data,
  success: success
});

поэтому вы хотели бы сделать свой звонок так:

$.ajax({
  dataType: "json",
  url: url,
  data: data,
  success: success,
  timeout: 15000
});

$('.loadingDiv')
    .hide()
    .ajaxStart(function() {
        $(this).fadeIn();
    })
    .ajaxStop(function() {
        $(this).fadeOut();
    });
1
добавлено

Я не думаю, что любой из этих ответов идеален. Я знаю, что это уже много лет, но то, что вы хотите сделать, это использовать параметры обратного вызова успеха/ошибки метода .ajax (); при получении ответа JSONP.

Пример того, как я буду структурировать это:

   //Call
    $.ajax({

     //URL you want to get
      url: 'http://example.com/json?callback=?',

     //Set a realistic time in milliseconds
      timeout: 3000,

     //Put in success callback function here, this example
     //shows you the data you got back from the call
      success: function(data) {
        console.log(data);
      },

     //Put in an error handling function, just an alert in this case
      error: function(badData) {
        alert('The call was unsuccessful');
      },

      type: 'POST'
    });
0
добавлено
JavaScript Jobs — чат
JavaScript Jobs — чат
8 336 участник(ов)

JavaScript Jobs — чат для поиска работы и людей Правила оформления: https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru

JavaScript.ru
JavaScript.ru
7 932 участник(ов)

Сообщество сайта JavaScript.ru в Slack.

pro.js
pro.js
4 675 участник(ов)

Про JavaScript и NodeJS Invite: https://t.me/joinchat/Be4rsT5Rsgq30DHutjxXgA Правила: http://telegra.ph/ru-chat-rules-06-19 Вакансии только с ЗП, не чаще раза в неделю.

Верстка сайтов HTML/CSS/JS/PHP
Верстка сайтов HTML/CSS/JS/PHP
3 439 участник(ов)

Правила группы: напишите !rules в чате. Группа Вк: vk.com/web_structure Freelancer: @web_fl Веб Дизайн: @dev_design Маркетолог: @topmarkening Автор: @M_Boroda

JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
3 269 участник(ов)

Рекомендуем сразу отключить уведомления Правила: https://rudevs.network/ByaMH6un7 См. также: @js_noobs_ru, @nodejs_ru, @typescript_ru, @react_js, @electron_ru Вакансии и поиск работы: @javascript_jobs

JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
2 484 участник(ов)

Чат для новичков

javascript_ru
javascript_ru
915 участник(ов)

Сообщество любителей самого популярного языка программирования в мире. Чат основан в 2009 году. Логи: https://goo.gl/9EOeM7 Поддержка бота: @chat_linker (ссылка на репу внутри) Вам будут интересны @frontend_ru и @css_ru

jsChat
jsChat
603 участник(ов)

Чат посвященный программированию на языке javaScript Перед отправкой ссылки на Ваш контент посоветуйтесь с админом Все ссылки удаляются ботом автоматически

JavaScript for Zombies Chat
JavaScript for Zombies Chat
492 участник(ов)

Чат про JavaScript для настоящих zombie! Вход строго по приглашениям! Ссылка для строгих приглашений: https://t.me/joinchat/AAMBHz3Uyr0tuZ7VaB029g

All That JS
All That JS
417 участник(ов)

JS на русском