2010-02-08 10 views
15

अभी, जिस सर्वर प्रतिक्रिया के साथ मैं काम कर रहा हूं, वह इस तरह एक JSON प्रतिक्रिया भेजता है:JEditable, JSON प्रतिक्रिया को कैसे संभालें?

{"status":1} 

सहेजने के बाद, जेडटेबल वास्तविक प्रतिक्रिया देता है: पृष्ठ पर {"status":1}। वैसे भी इस मुद्दे को पाने के लिए?

+0

फ़ेलिप के उत्तर में वर्णित कॉलबैक में 'मान' चर, सर्वर प्रतिक्रिया रखता है। तो आप कॉलबैक में जो भी चाहें कर सकते हैं। मैंने उपयोगकर्ता के लिए पृष्ठ पर प्रदर्शित पाठ को भरने के लिए, और पृष्ठ पर अन्य परिवर्तनों को निर्धारित करने के लिए अपने सर्वर की JSON प्रतिक्रिया का उपयोग किया। –

उत्तर

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 इनपुट क्षेत्र में "परिणाम" फ़ील्ड प्रदर्शित करना चाहते हैं।

jquery.jeditable.js के लिए निम्न 2 लाइनों जोड़ें:

(लाइन 95 के आसपास):

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

(लाइन 350 के आसपास है, है ना "के बाद सफलता: समारोह (परिणाम, स्थिति) {

$(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. 
: "

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

फिर, अपने स्वयं के कोड में, निम्नलिखित की तरह कुछ करना

यह आपको ठंडा सामान देता है जैसे कि आपका सर्वर संक्षेप में पूर्ण तारों आदि में परिवर्तित करता है।

आनंद लें!

+0

अच्छा, बहुत अच्छी तरह से काम करता है –

+9

मेरे दिमाग को उड़ाता है कि यह डिफ़ॉल्ट रूप से प्लगइन में मौजूद नहीं है। आपकी सहायता के लिए धन्यवाद. – siliconrockstar

+0

सहमत: यह प्लगइन में होना चाहिए क्योंकि यह उपयोग मामलों के समूह के लिए बेहद आसान है। – northernman

2

इस प्रकार मैंने जेसन प्रतिक्रिया को संभाला।

सबसे पहले, 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

स्टैक ओवरव्लो में आपका स्वागत है। कृपया ध्यान रखें, पोस्ट पढ़ने के दौरान विराम चिह्न और उचित पूंजीकरण जबरदस्त मदद करता है। – phant0m

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

यह एक अच्छा समाधान है, जहां मुझे जेडटेबल स्क्रिप्ट, thx को संपादित करने की आवश्यकता नहीं है। –

+2

मैं यह कहने जा रहा था कि मैं नहीं देखता कि यह कैसे काम करेगा। कॉलबैक में, 'मान' सबमिट किए गए मान को संदर्भित करता है, प्रतिक्रिया नहीं। लेकिन मैंने अभी इसका परीक्षण किया है और मूल्य वापसी मूल्य है सबमिट मूल्य नहीं! जेडटेबल पेज (http://www.appelsiini.net/projects/jeditable) पर, यह कहता है "मूल्य में सबमिट सामग्री सामग्री शामिल है।" जो गलत है! (इसके अलावा, वैसे, आपके पास save.php के बाद एक अतिरिक्त उद्धरण है जो आपके कोड मार्कअप को गड़बड़ कर रहा है।) –

+0

मार्कअप को ठीक किया गया। धन्यवाद @ बटलबूटस –

संबंधित मुद्दे