2009-06-20 58 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); 
    } 
} 
...