jQuery:Обработка ответов на внутренние ошибки Сервера

StackOverflow https://stackoverflow.com/questions/4604932

Вопрос

У меня есть форма на странице, которая добавляет новые данные в базу данных с помощью jQuery.Это работает нормально, но иногда сервер выходит из строя, и я получаю 500 (Внутренняя ошибка сервера), но это потому, что мой сервер - отстой.

Проблема в том, что я иногда получаю сообщение об ошибке сервера после того, как PHP выполняет добавление в базу данных, но вместо получения сообщения об успешном завершении я получаю сообщение об ошибке, даже несмотря на то, что добавление было произведено.Итак, как мне следует поступить, чтобы убедиться, что PHP не добавит данные, если я получу сообщение об ошибке?

[И да, я в конце концов переключусь на новый сервер, но ни один сервер не идеален]

Вот сценарий:

$.ajax({
  type: "POST",
  url: "/clase/do-add",
  data: $("#add").serialize(),
  dataType: "json",
  timeout: 8000,
  beforeSend: function() {
    var icon = '<p class="loading-add"></p>'; // loading icon
    $('form#add').append(icon);
  },
  success: function(data) {
    if (data.error == true) { // php returns error = true if name is invalid
      alert('Invalid name.');
      $('form#add').find('p').remove();
    } else {
      // make the addition
    }
  },
  error: function () { 
    $('form#add').find('p').remove();
    alert('Error. Try again.');
  }
});
Это было полезно?

Решение

Вы можете обернуть вас AJAX CALL в функции и снова «Reqest» функцию снова по ошибке.

Что-то в Линке это:

jQuery.fn = function yourajaxfunction(){
    $.ajax({
      type: "POST",
      url: "/clase/do-add",
      data: $("#add").serialize(),
      dataType: "json",
      timeout: 8000,
      beforeSend: function() {
        var icon = '<p class="loading-add"></p>'; // loading icon
        $('form#add').append(icon);
      },
      success: function(data) {
        if (data.error == true) { // php returns error = true if name is invalid
          alert('Invalid name.');
          $('form#add').find('p').remove();
        } else {
          // make the addition
        }
      },
      error: function () { 
        $('form#add').find('p').remove();
        // ####### i added this:
        $(this).yourajaxfunction();
        alert('Error. Try again.');
      }
    });
}

Или вы можете иметь функцию простоя, которая снова проверяет после некоторых милисекунтов, прежде чем выполнить функцию снова по ошибке:

$(this).idle().yourajaxfunction();

Функция холостого хода используется выше:

jQuery.fn.idle = function(time){
    var o = $(this);
    o.queue(function(){
       setTimeout(function(){
          o.dequeue();
       }, time);
    });
    return o;
};

Но лучшее, что нужно исправить сервер .. Этот материал просто взлома и исправления, которые компенсируют другую проблему: плохой сервер. :)

Так что это не хорошая идея для любых производственных сценариев.

Другие советы

можете ли вы создать элемент управления вставкой в базу данных, если при добавлении возвращается ошибка.

   ...
   error: function () { 
        var fError = function() {

             $('form#add').find('p').remove();
             alert('Error. Try again.');

            };

       $.ajax({
          type: "GET",
          url: "/clase/do-check",
          data: {id: id}, // id for check
          dataType: "json",
          success: function(data) {
            if (!data.ok)
               fError();
          },
          error: function () { 
               fError();
          }
        });              
   }
   ...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top