jQuery .get функція відповіді на помилку?


74

Завдяки StackOverflow мені вдалося змусити наступний код працювати бездоганно, але у мене є подальше запитання.

$.get('http://example.com/page/2/', function(data){ 
  $(data).find('#reviews .card').appendTo('#reviews');
});

Цей код вище дозволив моєму сайту отримати другу сторінку статей за допомогою кнопки «Завантажити більше» в WordPress. Однак коли на сайті закінчуються сторінки / результати, я стикаюся з невеликою проблемою. Кнопка завантажити більше залишається на місці. Він буде продовжувати намагатися отримати дані, навіть якщо сторінок не залишилося.

Як я можу налаштувати цю команду, щоб я міг продемонструвати візуальну відповідь, якщо .getзапит не вдається або, наприклад, сторінку (404) не знайдено?

Якби хтось міг допомогти мені простим прикладом навіть такого, alert("woops!");що було б чудово!

Дякую!


$ .AjaxSetup Функція працює як шарм, його кращий варіант за $ прибудете - stackoverflow.com/questions/2175756/how-to-handle-error-in-get
BetaCoder

Відповіді:


182

$.getне дає вам можливості встановити обробник помилок. $.ajaxНатомість вам потрібно буде використовувати функцію низького рівня :

$.ajax({
    url: 'http://example.com/page/2/',
    type: 'GET',
    success: function(data){ 
        $(data).find('#reviews .card').appendTo('#reviews');
    },
    error: function(data) {
        alert('woops!'); //or whatever
    }
});

Редагувати березень '10

Зверніть увагу, що за допомогою нового jqXHRоб’єкта в jQuery 1.5 ви можете встановити обробник помилок після виклику $.get:

$.get('http://example.com/page/2/', function(data){ 
    $(data).find('#reviews .card').appendTo('#reviews');
}).fail(function() {
    alert('woops'); // or whatever
});

Вам не потрібно цього робити, є інші альтернативи $.ajaxSetup()та ajaxErrorглобальна подія.
Нік Кравер

це рішення є більш інтуїтивним

Чи є у програмі «Провал» якісь подробиці про те, чому вона не вдалася?
jjxtra

34

Якщо вам потрібна загальна помилка, ви можете налаштувати всі $.ajax()(які $.get()використовуються внизу) запити, які jQuery робить для відображення помилки, використовуючи $.ajaxSetup(), наприклад:

$.ajaxSetup({
  error: function(xhr, status, error) {
    alert("An AJAX error occured: " + status + "\nError: " + error);
  }
});

Просто запустіть це один раз перед здійсненням будь-яких викликів AJAX (жодних змін у вашому поточному коді, просто наклейте це десь раніше). Це встановлює errorопцію за замовчуванням для обробника / функції вище, якщо ви здійснили повний $.ajax()виклик і вказали errorобробник, то те, що ви мали, замінить вищезазначене.


Не працює, я отримую таке попередження: Сталася помилка AJAX: Помилка помилки:
Джош Рібаков,

Використовуйте console.log замість alert (): console.log("An AJAX error occured: " + status + "\nError: " + error);
gael

13

Ви можете отримати детальну помилку, використовуючи властивість responseText.

$.ajaxSetup({
error: function(xhr, status, error) {
alert("An AJAX error occured: " + status + "\nError: " + error + "\nError detail: " + xhr.responseText);
     } 
    });

1

Ви можете зв’язати .fail()зворотний виклик для відповіді на помилку .

$.get('http://example.com/page/2/', function(data){ 
   $(data).find('#reviews .card').appendTo('#reviews');
})
.fail(function() {
  //Error logic
})
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.