Jeditable Async는 오류에서 되돌립니다
문제
jQuery 용 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);
}
또한 잘 작동하는 의견에 동기 구현을 포함 시켰습니다. 높은 서버로드 시나리오에서는 편집이 백엔드에서 완료 될 때까지 브라우저를 잠글 수 있습니다. 차라리 Id는 값을 반환하고 편집이 실패하면 나중에 다시 되돌아갑니다.
감사,
편집하다
Jitters 제안을 시도하고 IE8에서 작동하는 후, 버튼을 클릭하면 FF와 Chrome에 문제가 있다는 것을 깨달았습니다. 뿐. 필드를 클릭하면 편집 한 다음 Enter Enter를 누르면 모든 것이 정상입니다. 콜백이 발사되고 값이 재설정됩니다.
필드를 클릭하고 편집 한 다음 확인 버튼을 클릭 한 다음 수신 및 유효성 검사 오류가 발생하지 않으면 양식이 활성화되어 거기에 앉습니다. 오류가 수신되면 부분이 실행되면 텍스트 값이 원본으로 되돌아 가면 필드를 다시 클릭 할 수 없습니다. Jeditable이 바운드되지 않은 것 같습니다.
Firebug에서 게시물과 응답이 접수되어 Ajax가 발사되고 있음을 확인할 수 있습니다.
{ "errormsg": ""}
Enter를 누르지 만 확인 버튼을 클릭하면 Enter를 누르지 않으면 모든 브라우저 에서이 작업이 완벽하게 작동하는 이유는 무엇입니까? 동일한 코드가 어느 쪽이든 실행되고 버튼이 확실히 양식을 올바르게 제출합니다.
결합되지 않은 일은 버튼 누름으로 만 발생합니다.
누구든지 Jeditable 및 처리 서버 측 유효성 검사 문제를 사용하는 예가 있습니까?
해결책
간단히 작동하지 않습니까?
...
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);
}
}
...
다른 팁
다른 방법이 있습니다. 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);
}
}
...