2011-12-21 13 views
12

मैं कोडिनेटर का उपयोग करके POST अनुरोध में भेजे गए JSON ऑब्जेक्ट को प्राप्त करने और पार्स करने का प्रयास कर रहा हूं लेकिन मैं इसे "ढूंढ नहीं सकता"।कोडनिर्देशक नियंत्रक को JSON पोस्ट करें

public function parse() { 

    $json = $this->input->post(); 
    $json = stripslashes($json); 
    $json = json_decode($json); 

    print_r($json); 

} 

यह मेरा JSON ऑब्जेक्ट है:

यह मेरा नियंत्रक कोड है

{"data":"value"} 

उत्तर

2

प्रयास करें इस बजाय

$json = $this->input->post('data'); 
$json = stripslashes($json); 
$json = json_decode($json); 
print_r($json); 

आप डेटा के कुंजी में पारित करने के लिए की जरूरत है परिवर्तनीय आप पोस्ट सरणी से post()

पर तर्क के रूप में चाहते हैं
+0

कि दुर्भाग्य से या तो काम नहीं किया वापस आ जाएगी। कुछ भी नहीं दिखाया गया है। –

+0

यह काम करता है: डेटा = {"रंग": "नीला"} लेकिन क्या यह ठीक है? एक पुस्तकालय के साथ ठंडा होगा जो उन्हें "रूपांतरित" कर सकता है ताकि मैं कोडनिर्देशक सत्यापन का उपयोग कर सकूं। –

-1

$this->input->post() का उपयोग कर इसे हमेशा खाली वापस आ जाएगी

json_decode(array($this->input->post())) 

या

$tmp[] = (array)json_decode($this->input->post()); 

print_r($tmp); 
+1

$ यह-> इनपुट-> पोस्ट() सरणी हमेशा खाली होती है। मैं समझ नहीं सकता क्यों। –

+0

मैंने यह भी कोशिश की और यह मुझे खाली सरणी देता है – Uahmed

0

कोशिश सुनिश्चित करें कि आप पोस्ट डेटा है बनाने के लिए, है, तो आप इनपुट प्रकार नाम पर रखना चाहिए $this->input->post('name_of_input_text')

0

क्या आपको यकीन है आप डेटा पोस्ट कर रहे हैं और इसके बजाय जीईटी नहीं कर रहे हैं? मैं आज इस मुद्दे में भाग गया था (जिस तरह से मुझे यह सवाल मिला) और मैं एक पोस्ट कर रहा था लेकिन जेएसओएनपी का उपयोग कर एक जीईटी के साथ किया जाता है।

कोडइग्निटर में get_post नामक एक फ़ंक्शन है जो कहीं भी होने पर डेटा प्राप्त करेगा।

$this->input->get_post_string('data'); 

मुझे उम्मीद है कि यह आपकी मदद करेगा।

यदि आप चाहें तो मैन्युअल रूप से ऐसा कर सकते हैं।

function get_post($index = '', $xss_clean = FALSE){ 
    if (! isset($_POST[$index])) 
    { 
     return $this->get($index, $xss_clean); 
    } 
    else 
    { 
     return $this->post($index, $xss_clean); 
    } 
} 
21

यह करने का यह सही तरीका है।

$input_data = json_decode(trim(file_get_contents('php://input')), true); 
+0

php: // इनपुट केवल एक बार पढ़ा जा सकता है, और कोडइग्निटर इनपुट क्लास इस बिंदु से पहले से ही इसे पढ़ लेगा। –

+0

बस अपने अनुरोध हेडर, 'सामग्री-प्रकार: एप्लिकेशन/जेसन' में सही सामग्री प्रकार जोड़ें। क्रिस द्वारा वर्णित अनुसार, कोडिग्निटर आपकी विधि कहने से पहले इनपुट पढ़ता है। – Shailesh

+0

जो कुछ भी आप टिप्पणी कर रहे हैं, उनके पास उस तारीख से कोई संबंध नहीं है जिस पर मैंने यह उत्तर पोस्ट किया था, जो मैंने पोस्ट की तारीख को सही था। – CMCDragonkai

0

मैं जानता हूँ कि यह एक पुरानी पोस्ट है, लेकिन तलाश में दूसरों के लिए, यह उपयोगी हो सकता है:

ब्राउज़र पक्ष पर, मैं इस पद्धति के समान कोड का उपयोग कर अपने डेटा पैकेट बनाने के लिए:

var form_data = { }; 
    $.each($('#mvt_dialog_form').serializeArray(), function() { 
     form_data[this.name] = this.value; 
    }); 

    // add the address data to the payload 
    var result = { 
     form_data: form_data, 
     locations: addressData, 
     selected_location: selectedLocation 
    }; 

    // now wrap it all up with a pretty bow 
    // Seriously, the key:value format is required for codeigniter INPUT class to be able to "see" 
    var movement = { 
     movement_dlg: JSON.stringify(result) 
    }; 

मैं फिर सर्वर पर "पोस्ट" आंदोलन करता हूं। नियंत्रक में, मैं उसके बाद निम्न तर्क का उपयोग करें:

// Perform XSS filtering 
    $postData = $this->input->post(NULL, TRUE); 
    $result = json_decode($postData['movement_dlg']); 
0

बस अपने अनुरोध हेडर करने के लिए सही सामग्री प्रकार जोड़ने

Content-Type: application/json 
3
$post = json_decode($this->security->xss_clean($this->input->raw_input_stream)); 

जब आप $ this-> इनपुट-> raw_input_stream आप का उपयोग इसे कई बार पढ़ सकते हैं और इसकी मूल रूप से file_get_contents ('php: // input') के समान ही हो सकता है। यह सीआई 3 पर काम करता है। मुझे नहीं पता कि यह सीआई 2 पर काम करता है या नहीं।

0

फ़िरज़ का उत्तर सही है लेकिन यहां एक और विस्तृत उत्तर दिया गया है। मुझे टिप्पणी करने की अनुमति नहीं है इसलिए मैं इसे उत्तर के रूप में पोस्ट कर रहा हूं।

इसे कोडइग्निटर के साथ JSON लाने में सक्षम नहीं है। jQuery कुछ हुड चाल के तहत करता है और आपके डेटा को form-data-x में बदल देता है, यही कारण है कि जब आप content type निर्दिष्ट नहीं करते हैं, तो अपनी ऑब्जेक्ट या अन्य स्थितियों को एन्कोड न करें।

आप एक शुद्ध JSON चाहते हैं समाधान $this->input->raw_input_stream उपयोग करने के लिए अपने JSON लाने और का उपयोग कर php के json_decode यह डिकोड करने के लिए है। नीचे पूरा जवाब और कोड की जाँच करें:

Retrieve JSON POST data in CodeIgniter

2

इस कोड का प्रयास करें, यह उत्पादन अपने सभी मापदंडों के साथ एक सरणी होगा।

$this->input->raw_input_stream; 

$input_data = json_decode($this->input->raw_input_stream, true); 

$input_data सरणी

+0

यह दृष्टिकोण मुझ पर काम करता है। धन्यवाद – tthreetorch

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