Frage

Ich habe das Jeditable Plugin für JQuery benutze, und ich würde gerne Fehler an das Plugin zurückzukehren, es zu unterweisen auf den vorherigen Wert zurückzukehren und auch einen Fehler an den Benutzer angezeigt werden soll. Ich habe diese Arbeit einen synchronen Ajax-Aufruf verwenden, aber ich würde es vorziehen, statt asynchronen Rückruf zu verwenden. Der Code, den ich zu weit haben, ist unten.

$("#editbox").editable(submitEdit, { 
     indicator : "Saving...",
     tooltip   : "Click to edit...",
     name : "Editable.EmailAddress",
     id   : "elementid",
     type : "text",
     submit  : "<span class=\"mini_button\">Ok</span>",
     cssclass : "edit_text"
});
function submitEdit(value, settings)
{ 
     var edits = new Object();
     var origvalue = this.revert;
     var textbox = this;
     edits[settings.name] = [value];
     var returned = $.ajax({
                        url: "http://someurl.com/edit/", 
                        type: "POST",
                        /*async: false,*/
                        data : edits,
                        dataType : "json",
                        complete : function (XMLHttpRequest, textStatus) 
                                   {
                                       alert("Setting back to original value " +origvalue);
                                       $(textbox).html(origvalue);
                                   }
                     });

      /*var response = $.secureEvalJSON(returned.responseText);
      if (response.errorMsg != '')
      {    
          $("#ajaxNotify").addClass("ajax_error").html(response.errorMsg); 
          return(this.revert);                     
      }*/
      return(value);
 }

Ich habe auch meine synchrone Umsetzung in den Kommentaren, die gut funktioniert. In einem hohen Serverlast Szenario würden sperren diese den Browser, bis die Bearbeitung auf dem Back-End beendet. Id eher dies den Wert zurück und kehrt sie zu einem späteren Zeitpunkt wieder, wenn bearbeiten fehlschlägt.

Danke,

Bearbeiten

Nach Bammel Vorschlag versucht, und es immer in IE8 arbeiten, erkannte ich, das Problem war mit FF und Chrom, wenn ich auf die Schaltfläche klicken nur . Wenn ich das Feld, zu bearbeiten klicken und drücken Sie die Eingabetaste alles in Ordnung ist. Die Callback ausgelöst und der Wert wird zurückgesetzt.

Wenn ich Sie auf das Feld, zu bearbeiten und klicken Sie dann auf die OK-Taste und nicht empfangen und Validierungsfehler dann die Form bleibt aktiv, und nur dort sitzt. Wenn ein Fehler empfangen wird, der Teil ausführt, wird der Textwert auf den ursprünglichen zurückgekehrt, aber ich kann nicht dann das Feld klicken Sie erneut auf, Jeditable wurde ungebundenes es scheint.

Ich kann bestätigen, dass die Post und Antworten in Firebug empfangen werden, so Ajax feuert.

{ "errorMsg": ""}

Warum funktioniert das perfekt in allen Browsern, wenn ich drücken eingeben, aber nicht, wenn ich auf die Schaltfläche OK? Der gleiche Code wird so oder so ausgeführt, und die Taste definitiv Absenden des Formulars korrekt.

Das unbinding geschieht auch nur mit dem Knopf drückt.

Hat jemand ein Beispiel für die Verwendung Jeditable und Fragen Server-seitige Validierung Handhabung, wie diese?

War es hilfreich?

Lösung

Ganz einfach nicht funktioniert?

...
complete : function (xhr, textStatus) {
  $.secureEvalJSON(xhr.responseText);
  if (response.errorMsg != '') {
    $("#ajaxNotify").addClass("ajax_error").html(response.errorMsg);
    alert("Setting back to original value " +origvalue);
    $(textbox).html(origvalue);
  }
}
...

Andere Tipps

Es gibt eine andere Art und Weise ist, können Sie Jeditable onerror Funktion prüfen.

...
onerror: function(settings, original, xhr) {
  $.secureEvalJSON(xhr.responseText);
  if (response.errorMsg != '') {
    var origvalue = ...;
    $("#ajaxNotify").addClass("ajax_error").html(response.errorMsg);
    console.log("Setting back to original value " + origvalue);
    $(original).html(origvalue);
  }
}
...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top