Jeditable Async возвращается при ошибке - PullRequest
4 голосов
/ 20 июня 2009

Я использовал плагин JEditable для JQuery, и я хотел бы возвратить ошибки плагину, чтобы дать ему команду вернуться к предыдущему значению, а также отобразить ошибку для пользователя. У меня это работает с использованием синхронного вызова AJAX, но я бы предпочел использовать вместо этого асинхронный обратный вызов. Код, который я должен далеко, ниже.

$("#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);
 }

Я также включил мою синхронную реализацию в комментарии, которая работает хорошо. В сценарии с высокой нагрузкой на сервер это блокирует браузер до тех пор, пока редактирование не завершится на серверной части. Скорее, это вернет значение и вернет его позже, если редактирование не удастся.

Спасибо

EDIT

После попытки предложить джиттерс и заставить его работать в IE8, я понял, что проблема была с FF и chrome, когда я нажимал кнопку только . Если я щёлкну по полю, отредактирую, а затем нажму Enter, все в порядке. Обратный вызов срабатывает, и значение сбрасывается.

Если я щелкну по полю, отредактирую, а затем нажму кнопку ОК, и не получу сообщение об ошибке проверки, тогда форма останется активной и просто окажется там. Если получена ошибка, что часть выполняется, текстовое значение возвращается к исходному, однако затем я не могу снова щелкнуть поле, кажется, jeditable был освобожден.

Я могу подтвердить, что почта и ответы принимаются в firebug, поэтому Ajax стреляет.

{ "ErrorMsg": ""}

Почему это прекрасно работает во всех браузерах, если я нажимаю клавишу ввода, но не нажимаю кнопку ОК? Один и тот же код выполняется в любом случае, и кнопка точно отправляет форму правильно.

Отвязывание также происходит только при нажатии кнопок.

Есть ли у кого-нибудь примеры использования jeditable и решения проблем проверки на стороне сервера, таких как эти?

Ответы [ 2 ]

5 голосов
/ 20 июня 2009

Просто это не работает?

...
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);
  }
}
...
0 голосов
/ 09 августа 2011

Есть и другой способ, вы можете рассмотреть jeditable функцию onerror.

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