2009-10-14 7 views
10

मुझे किसी फ़ॉर्म से सभी इनपुट को JSON स्ट्रिंग में क्रमबद्ध करने की आवश्यकता है।
this post की मदद से, मैं सफलतापूर्वक एक मान्य स्ट्रिंग के रूप में नीचे बना सकते हैं:jQuery: डेटा पोस्ट करने के लिए उपयोग किए गए JSON स्ट्रिंग से बचने वाले AJAX फ़ंक्शन को कैसे रोकें

{"input01":"value01","input02":"value02","input03":"value03"} 

हालांकि, जब मैं स्ट्रिंग का उपयोग करना jQuery के अजाक्स समारोह का उपयोग कर डेटा पोस्ट करने की कोशिश है, यह स्ट्रिंग के लिए बैकस्लैश जोड़ने के लिए लगता है , जिसके परिणामस्वरूप JSON स्ट्रिंग को POST के बजाय GET का उपयोग करके भेजा जा रहा है।

[{\"input01\":\"value01\",\"input02\":\"value02\",\"input03\":\"value03\"}] => 

मैं alert() का उपयोग कर पुष्टि करने के लिए संरचना AJAX समारोह में इस्तेमाल किया जा रहा से पहले सही है JSON स्ट्रिंग का परीक्षण किया है: लोड पीएचपी पेज के एक $_GET सरणी देता है।
इसके अतिरिक्त, यदि मैं मैन्युअल रूप से मान्य JSON स्ट्रिंग में टाइप करता हूं, तो AJAX डेटा को सही तरीके से पोस्ट करता है।

var dataJSON = $.toJSON($('#form').serializeObject()); 
alert(dataJSON); 

$.ajax({ 
    type: "POST", 
    url: "ajax.php", 
    data: 'Query01=01&Query02=02', 
    dataType: 'json', 
    success: function(data){ 
     if (data==1){ 
     $('#wrap').load('ajax.php',dataJSON); 
     } 
    } 
}); 
+0

आप कॉल कर रहे हैं '.ajax()', तो '.load के साथ एक और ajax अनुरोध()' बना रही है। क्या वो सही है? –

+0

Roatin, यह सही है। ऊपर दिया गया उदाहरण मेरी वास्तविक लिपि से सरलीकृत है। $ .ajax का उपयोग कर वास्तविक स्क्रिप्ट पोस्ट डेटा जिसे सफलतापूर्वक सत्यापित किया जाना है, $ .load फ़ंक्शन JSON स्ट्रिंग द्वारा पोस्ट किए गए डेटा से उत्पन्न HTML लोड करता है। – ticallian

उत्तर

1

गूगल और jQuery साइट परिशोध करने के बाद, मैं व्यक्तिगत निष्कर्ष है कि $.load समारोह एक क्वेरी स्ट्रिंग के रूप में किसी भी चर इसे करने के लिए पारित कर दिया परिवर्तित कर देंगे (अपने मूल समस्या के रूप में उल्लिखित ऊपर) पर आए हैं। यदि आप इसके माध्यम से एक JSON स्ट्रिंग पास करना चाहते हैं, तो इसे मैन्युअल रूप से टाइप करना होगा।

इसके आसपास पाने के लिए, मैंने निम्न स्तर $.ajax फ़ंक्शन का उपयोग किया। इस विधि का उपयोग करने का एक लाभ यह था कि मैं अपने फॉर्म डेटा को जेएसओएन में परिवर्तित करने के बजाय मानक .serialize() फ़ंक्शन का उपयोग करके पोस्ट डेटा भी भेज सकता हूं।

मेरे अंतिम कोड:

var formData = $('#form').serialize(); 

$.ajax({ 
    type: "POST", 
    url: "ajax.php", 
    data: 'Query01=01&Query02=02', 
    dataType: 'json', 
    success: function(data){ 
      if (data==1){ 
       $.ajax({ 
        type: "POST", 
        url: "ajax.php", 
        data: formData, 
        success: function(html){ 
         $("#wrap").replaceWith(html); 
        } 
       }); 
      } 
    } 
}); 

किसी और के लिए एक समाधान है, तो टिप्पणी करें।

+1

चूंकि आप सर्वर-साइड के रूप में php का उपयोग कर रहे हैं। मुझे लगता है, आप php फ़ंक्शन 'स्ट्रिप्सलाश() ' –

11

यह $.ajax() के डिफ़ॉल्ट व्यवहार है:

मेरे कोड इस प्रकार है। आप processData विकल्प false पर सेट करके इसे बदल सकते हैं। $.ajax() options देखें।

data Object, String 

डाटा सर्वर के लिए भेजा जा सकता है। यह एक क्वेरी स्ट्रिंग में कनवर्ट किया गया है, यदि पहले से ही एक स्ट्रिंग नहीं है। यह GET-request के लिए यूआरएल में जोड़ा गया है। इस स्वचालित प्रसंस्करण को रोकने के लिए प्रक्रिया डेटा विकल्प देखें। ऑब्जेक्ट कुंजी/मान जोड़े होना चाहिए। यदि मान एक ऐरे है, तो jQuery समान कुंजी i.e. {foo: ["bar1", "bar2"]} '& foo = bar1 & foo = bar2' बन जाता है।

और

processData Boolean Default: true 

डिफ़ॉल्ट रूप से, डेटा एक वस्तु (तकनीकी रूप से, कुछ भी एक स्ट्रिंग के अलावा अन्य) संसाधित और एक प्रश्न के रूप में तब्दील हो जाएगा के रूप में विकल्प आंकड़ों के में पारित स्ट्रिंग, डिफ़ॉल्ट सामग्री-प्रकार "अनुप्रयोग/एक्स-www-form-urlencoded" के लिए उपयुक्त है। यदि आप DOMDocuments, या अन्य गैर-संसाधित डेटा भेजना चाहते हैं, तो यह विकल्प गलत पर सेट करें।

+0

मैंने बिना किसी किस्मत के ऊपर सूचीबद्ध जानकारी का परीक्षण किया है। मैं $ .ajax विकल्पों को देख सकता हूं, नेस्टेड $ .load फ़ंक्शन को प्रभावित नहीं करता है। $ .load के लिए मैं वही विकल्प कैसे बदल सकता हूं इस पर कोई विचार? – ticallian

+0

@ticallian मुझे यकीन नहीं है कि आपको सफलता समारोह के अंदर लोड फ़ंक्शन की आवश्यकता क्यों है। क्या आप जेसन मूल्य का उपयोग कर $ .ajax अनुरोध में बस इतना कुछ नहीं प्राप्त कर सकते हैं? – Metropolis

+0

'processData: false' ने कुछ भी नहीं लौटा –

2

सुनिश्चित करें कि आप

echo $_GET['varwithurl'] 

नहीं

echo json_encode($_GET['varwithurl']) 

के रूप में कई php वेब उदाहरण करते रहें।

मैं $.ajax() के साथ यूआरएल के साथ डेटा भेजता हूं और php स्क्रिप्ट में अवांछित बैकस्लैश नहीं देखता हूं।

-2
<html> 
<head> 
<script src="resources/jquery-2.1.0.js"></script> 
<script src="resources/jquery.serializejson.min.js"></script> 
</head> 
<body> 
    <script> 

     $(document).ready(function(){ 

      $("#simplepost").click(function(e){ 

       var MyForm = $("#appForm").serializeJSON(); 
       console.log(MyForm); 

      $.ajax(
        { 
         url: "rest/emp/create", 
         type: "POST", 
         data: JSON.stringify(MyForm), 
         contentType: "application/json; charset=utf-8", 
         dataType: "json", 
         success:function(maindta){ 
          alert(maindta); 
         }, 
         error: function(jqXHR, testStatus, errorThrown){ 
          alert(errorThrown); 
         } 
        }); 
      e.preventDefault(); //STOP default action 
     }); 
    }); 
</script> 
<h2>Hello World!</h2> 
<form id="appForm" method="POST"> 
    EmployeeID:<input type="text" name='id' value="" /> 
    Employee Name:<input type="text" name="name" value=""/> 
<br> 
<input type="button" value="Submit" id="simplepost" /> 
</form> 
</body> 
</html> 
+2

स्पष्टीकरण के बिना कोड डंप का उपयोग कर सकते थे शायद ही कभी सहायक होते हैं। कृपया अपने उत्तर में कुछ संदर्भ जोड़ने पर विचार करें। – Chris

0

मैंने किया है ताकि यह stripslashes php पक्ष पर साथ काम करता है।

कुछ इस तरह:

$data = json_decode(stripslashes($_POST['json_data'])); 
संबंधित मुद्दे