我一直在使用Jd的JEditable插件,我想将错误返回给插件,以指示它恢复到之前的值,并向用户显示错误。我有这个工作使用同步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和chrome上。如果我单击该字段,编辑然后按回车一切都很好。回调触发,值重置。
如果我单击该字段,编辑然后单击确定按钮并且不接收并验证错误,则表单保持活动状态并且就在那里。如果收到该部分执行的错误,则文本值将恢复为原始值,但是我无法再次单击该字段,看似jeditable已经解除绑定。
我可以确认帖子和回复是在萤火虫中收到的,所以ajax正在开火。
{ “ERRORMSG”: “”}
如果我按Enter键,为什么这在所有浏览器中都能完美运行,但如果单击确定按钮则不然?无论哪种方式执行相同的代码,按钮肯定是正确提交表单。
解除绑定的事情也只会在按下按钮时发生。
有没有人有任何使用jeditable和处理服务器端验证问题的例子?
答案 0 :(得分: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 :(得分: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);
}
}
...