2009-06-20 62 views
4

我一直在使用JEditable JQuery插件,我想将错误返回给插件,以指示它恢复到以前的值,并向用户显示错误。我有这个工作使用同步ajax调用,但我宁愿使用异步回调。我需要的代码在下面。Jeditable异步恢复出错

$("#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和铬当我点击按钮唯一。如果我点击字段,编辑,然后按输入一切都很好。回调触发并且值被重置。

如果我单击该字段,编辑然后单击确定按钮,不会收到和验证错误,然后窗体保持活动,只是坐在那里。如果接收到该部分执行的错误,文本值将恢复为原始值,但是我不能再次单击该字段,jeditable似乎已解除​​绑定。

我可以确认邮件和回复正在萤火虫中收到,所以阿贾克斯正在射击。

{“ERRORMSG”:“”}

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

解除绑定的事情也只发生在按钮按下。

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

回答

5

只是这不行?

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

我已经尝试过5次解决方案,它没有工作,但现在它确实!看起来,当我在FireBug的回调的最后一行放置一个断点时,它将它填满。在试图调试我打破了它!我无法弄清楚发生了什么事。哦,谢谢你指出我的愚蠢:)。 – madcapnmckay 2009-06-20 12:29:49

0

还有另外一种方法,可以考虑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); 
    } 
} 
...