2010-02-08 68 views
15

現在,我使用的服務器響應發回這樣的JSON響應:在頁面上{"status":1}JEditable,如何處理JSON響應?

{"status":1} 

節能,jeditable地方實際的響應之後。無論如何要解決這個問題?

+0

Felipe的答案中描述的回調中的'value'變量包含服務器響應。所以你可以在回調中做任何你想做的事情。我使用服務器的JSON響應爲用戶填寫頁面上顯示的文本,並確定頁面上的其他更改。 – 2015-04-01 22:46:58

回答

0

於是我想出了一個解決方案是類似於madcapnmckay answered here.

var editableTextArea = $('.editable-textarea'); 
     editableTextArea.editable(submitEditableTextArea, { 
    type  : 'textarea', 
    cancel : 'Cancel', 
    submit : 'Save', 
      name   : editableTextArea.attr('id'), 
      method  : 'post', 
      data   : function(value, settings) { 
             return $.fn.stripHTMLforAJAX(value); 
            }, 
      event  : "dblclick", 

    onsubmit : function(value, settings) { 
       //jquery bug: on callback reset display from block to inline 
       $('.btn-edit').show(0, function(){$(this).css('display','inline');}); 
       }, 
    onreset  : function(value, settings) { 
       //jquery bug: on callback reset display from block to inline 
       $('.btn-edit').show(0, function(){$(this).css('display','inline');}); 
       } 
    }); 

然後鏈接功能

function submitEditableTextArea(value, settings) { 
         var edits = new Object(); 
         var result = $.fn.addHTMLfromAJAX(value); 
         edits[settings.name] = [value]; 
         var returned = $.ajax({ 
          type   : "POST", 
          data   : edits, 
          dataType : "json", 
          success  : function(_data) { 
           var json = eval(_data); 
           if (json.status == 1) { 
            console.log('success'); 
           } 
          } 
         }); 
         return(result); 
        } 
23

更好的解決方案是進行後處理之前它返回的JSON數據點擊該頁面。

假設你的服務器返回以下JSON字符串:

{ "status": 1, "result": "value to be displayed", "other": "some other data" } 

,你想處理「狀態」和「其他」領域,並在jeditable輸入字段中顯示的「結果」字段。

以下2行添加到jquery.jeditable.js:

(圍繞線95):

var intercept = settings.intercept || function(s) {return s; }; 

(圍繞線350,右後的「成功:功能(因此,狀態){ 「

result = intercept.apply(self,[result]); 

然後,在你自己的代碼,這樣做如下:

$(some_field).editable(
'/some_url_on_your_server', 
{ 
    indicator : "<img src='/images/spinner.gif'>", 
    tooltip: "Click to edit.", 
    indicator: "Saving...", 
    onblur: "submit", 
    intercept: function (jsondata) { 
     obj = jQuery.parseJSON(jsondata); 
     // do something with obj.status and obj.other 
     return(obj.result); 
    }, 
    etc. 

這允許你做很酷的東西,比如讓你的服務器將縮寫轉換爲完整的字符串等。

享受!

+0

不錯,工作得很好 – 2011-05-05 17:18:03

+9

讓我想起這個插件默認情況下不存在。謝謝你的幫助。 – siliconrockstar 2012-07-24 18:28:59

+0

同意:它應該在插件中,因爲它對於一些用例非常方便。 – northernman 2012-08-21 16:52:06

2

這是我如何處理json響應。

首先,使用ajaxoptions設置數據類型。然後,在回調函數中處理您的數據。其中,this.revert是您的原始價值。

oTable.$('td:eq(3)').editable('/admin/products/add_quantity_used', { 
    "callback" : function(sValue, y) { 
     var aPos = oTable.fnGetPosition(this);   
     if($("#dialog-message").length != 0){ 
      $("#dialog-message").remove(); 
     } 
     if(!sValue.status){ 
     $("body").append('<div id="dialog-message" style="display:none;">'+sValue.value+'</div>'); 
     $("#dialog-message").dialog({ 
      modal: true, 
      buttons: { 
       Ok: function() { 
        $(this).dialog("close"); 
       } 
      } 
     }); 
     if(this.revert != '') 
      oTable.fnUpdate(this.revert, aPos[0], aPos[1]); 
     else 
      oTable.fnUpdate("click to edit", aPos[0], aPos[1]); 
     }else 
     if(sValue.status) 
      oTable.fnUpdate(sValue.value, aPos[0], aPos[1]); 


    }, 
    "submitdata" : function(value, settings) { 
     return { 
      "data[users_to_products][users_to_products_id]" : this.parentNode.getAttribute('id'), 
      "column" : oTable.fnGetPosition(this)[2]     
     }; 
    }, 
    "height" : "30px", 
    "width" : "30px", 
    "maxlength" : "3", 
    "name" : "data[users_to_products][quantity_used]", 
    "ajaxoptions": {"dataType":"json"} 
}).attr('align', 'center'); 
+0

歡迎來到StackOverflow。請記住,標點和適當的大寫在閱讀帖子時有很大的幫助。 – phant0m 2012-10-06 12:27:51

12

有一個簡單的方法來做到這一點,通過使用回調。 .editable()將任何響應轉換爲字符串,因此必須將響應轉換爲JSON變量。然後可以檢索這些值,然後使用'.text()'方法寫入。檢查代碼:

$("#myField").editable("http://www.example.com/save.php", { 
    submit : 'Save', 
    cancel : 'Cancel', 
    onblur : "ignore", 
    name  : "sentText", 
    callback : function(value, settings) { 
     var json = $.parseJSON(value); 
     $("#myField").text(json.sentText); 
    } 
}); 
+2

這是一個很好的解決方案,我不需要編輯JEditable腳本,thx。 – 2013-09-10 14:51:06

+2

我要說,我不明白這是如何工作的。在回調中,'value'是指提交的值,而不是迴應。但我只是測試它,並且值是返回值而不是提交的值!在可jeditable頁面(http://www.appelsiini.net/projects/jeditable)上,它顯示「Value包含提交的表單內容」。這是不正確的! (另外,順便說一句,在save.php之後有一個額外的報價,這會讓您的代碼標記搞亂。) – 2015-03-29 00:56:19

+0

修復了標記。謝謝@ButtleButkus – 2015-03-30 16:20:00