Frage

habe ich ein Formular auf einer Seite, die neuen Daten in eine Datenbank über jQuery erstellt. Es funktioniert gut, aber manchmal der Server scheißt und ich bekommen ein 500 (Internal Server Error) , aber das ist, weil mein Server saugt.

Das Problem ist, dass ich manchmal den Server-Fehler erhalten, nachdem die PHP die zusätzlich zu der Datenbank macht, sondern eine Erfolgsmeldung zu bekommen, habe ich den Fehler, auch wenn der Zusatz gemacht wurde. Wie also soll ich über diese gehen, um sicherzustellen, dass der PHP nicht die Daten hinzufügen, wenn ich den Fehler?

[Und ja, ich schale schließlich auf einen neuen Server, aber kein Server ist perfekt]

Hier ist das Skript:

$.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.');
  }
});
War es hilfreich?

Lösung

Sie können wickeln Sie Ajax-Aufruf in Funktion und „reqest“ die Funktion erneut auf Fehler.

Etwas linke folgt aus:

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.');
      }
    });
}

Sie können auch eine Leerlauf-Funktion haben, dass die Kontrollen wieder nach einigen Millisekunden, bevor Sie die Funktion erneut auf Fehler laufen:

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

Idle-Funktion verwendet oben:

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

Aber das Beste ist, um den Server zu beheben .. dieses Zeug nur Hacks und Patches, die für ein anderes Problem kompensieren: der schlechten Server. :)

Es ist also keine gute Idee für alle Produktionsszenarien.

Andere Tipps

können Sie erstellen eine Kontrolle des Einsatzes in die Datenbank, wenn die Zugabe von zurückgegebenen Fehler.

   ...
   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();
          }
        });              
   }
   ...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top