-->

Jeditable异步恢复的错误(Jeditable Async revert on error)

2019-09-16 14:49发布

我一直在使用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);
 }

我也包括我在评论中同步实现,效果很好。 在高服务器负载情况,直到完成编辑在后端,这将锁定浏览器。 我宁愿这个返回值,如果编辑失败,将其恢复在以后的时间。

谢谢,

编辑

试图抖动建议,并得到它在IE8的工作之后,我意识到这个问题是与FF和铬当我按一下按钮。 如果我点击了现场,编辑然后按enter键,一切都很好。 回调火灾和值将被重置。

如果我点击了现场,编辑,然后单击确定按钮,不接受,然后验证错误的形式保持活跃,只是坐在那里。 如果收到一个错误,部分执行,文本值被恢复到原来的,但我不能然后再次单击该领域,jeditable已经绑定看来。

我可以证实,帖子和响应的萤火接收这样Ajax是射击。

{ “ERRORMSG”: “”}

为什么这个工作完全在所有浏览器,如果我按enter但如果我点击确定按钮? 同样的代码被执行无论哪种方式,按钮是绝对正确提交表单。

解除绑定的东西也只有在按下按钮发生。

有没有人有使用jeditable和处理服务器端验证等问题,这些中的任何的例子吗?

Answer 1:

只需将此不起作用?

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


Answer 2:

还有一个办法,你可以考虑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);
  }
}
...


文章来源: Jeditable Async revert on error