2012-03-30 15 views
6

ठीक है यहाँ गंभीरता से संघर्ष कर रहा है। मुझे AJAX के माध्यम से PHP में बहु-आयामी सरणी भेजने की कोशिश करने में कुछ समस्याएं आ रही हैं। यहाँ मैं क्या कोशिश कर रहे हैं क्या है:PHP के लिए AJAX के माध्यम से बहुआयामी Arrays

बजाय आसान बनाने में कॉपी करने के लिए कोड की एक दीवार पेस्ट:

peoplearray[0] = [name] => 'john' 
         [age] => '28' 
         [sex] => 'Male' 
    peoplearray[1] = [name] => 'julie' 
         [age] => '20' 
         [sex] => 'Female' 

    main_array['item'] = 'x'; 
    main_array['something'] = 'x'; 
    main_array['another'] = 'x'; 

मैं इस post के माध्यम से PHP के लिए करना चाहते हैं। मैं सोचा मैं सिर्फ उन्हें शामिल होने के रूप में अच्छी तरह कर सकते हैं एक साथ के रूप में मैं बहुआयामी वैसे भी इस प्रकार हूँ: निम्नलिखित अभी

// var data = JSON.stringify(main_array); 

var send = $.ajax({ 
     type: "POST", 
     cache: false, 
     url: "theurl", 
     data: {data:main_array} //I do change this `main_array` when using the above stringify! 
}); 


send.done(function(msg) { 
console.log(msg); 
}) 
PHP में

मैं सिर्फ कर रहा हूँ:

main_array['peoplearray'] = peoplearray; 
अब

ajax करने के लिए

$data= $_POST['data']; 
print_r($data); 
फ़ायरबग में

: (an empty string)

जब मैं var data = JSON.stringify(main_array); है

Array () 

मूल रूप से main_array मुझे पता है एक सरणी होने की जरूरत नहीं है और इसलिए मुझे कोई समस्या नहीं भर है कि सामग्री प्राप्त कर सकते: अगर मैं php मैं पाने के लिए $data = json_decode($_POST['data']); जोड़ने [][

: uncommented मैं निम्नलिखित मिल लेकिन मुझे क्या करना है peoplearray पर प्राप्त करें ताकि मैं कुछ foreach आदि कर सकूं ... php में इसके साथ। किसी भी मदद की बहुत सराहना की जाएगी मुझे यकीन है कि मैं सिर्फ बेवकूफ हूँ!

संपादित करें: इसके पीछे तर्क यह है कि peoplearray में 0 या 100 प्रविष्टियां हो सकती हैं, इसलिए मुझे इसे PHP पर प्राप्त करने की आवश्यकता है ताकि मैं डीबी इनपुट करने के लिए foreach कर सकूं। यदि कोई बेहतर दृष्टिकोण है तो मैं इसे सुनकर बहुत आभारी हूं क्योंकि मैं अभी भी इसके लिए बहुत नया हूं।

संपादित करें: निकॉला का जवाब सब कुछ के लिए धन्यवाद महत्वपूर्ण हिस्सा जो mainarry.peoplearray है, सिवाय इसके ठीक गुजर रहा है - यह वापसी console.log में दिखाई दे रहा है और मैं PHP में इसे का उपयोग नहीं कर सकते। इस पर कोई समाधान या क्या मुझे जावास्क्रिप्ट में फोरच इंटेलिजेंस रखना है और बस सबकुछ अलग-अलग भेजना है?

+1

क्या आप पूरे जेएस फ़ंक्शन को पोस्ट कर सकते हैं जो AJAX अनुरोध करता है? यदि आप console.log (main_array) का उपयोग करते हैं ($ .ajax को कॉल करने से पहले) यह फ़ायरबग में क्या दिखाता है? –

+0

JSON.stringify से पहले इसे करने पर मुझे console.log (main_array) के साथ सही परिणाम मिल रहा है। JSON.stringify के बाद मुझे मिलता है: []। जहां तक ​​अजाक्स है, मैं वर्तमान में कर रहा हूं। वास्तव में यह एकमात्र सच्ची प्रतिलिपि और पेस्ट है! बस इस बिंदु पर पहुंचने के लिए मुझे क्रोम में हमेशा के लिए डिबगिंग सरणी ले गई है, मुझे पता नहीं चला है। – Zac

उत्तर

1

मैं इसे peoplearray अलग रख कर काम करने के लिए मिला है।

तो मैंने निकोला के रूप में किया और mainarray को किसी ऑब्जेक्ट के रूप में बनाया। curlies साथ घोषणा की: {}

peoplearray मैं [] साथ घोषित यानी एक सरणी के रूप में छोड़ दिया है, लेकिन उसके बाद name,age&sex क्षेत्रों मैंने किसी चीज़ यानी के रूप में बनाया। {} और फिर .push() उन्हें peoplearray में डाल दें।

var send = $.ajax({ 
     type: "POST", 
     dataType: "json", 
     cache: false, 
     url: "theurl", 
     data: {data:main_array, people:peoplearray} 
}); 
पीएचपी सब कुछ के साथ

तो $ _POST में उपलब्ध है, और आप

echo json_encode($people); //or whatever var name it is stored as in the php 

वस्तुओं यानी अगर name,age,sex गुण

में दिखाए जाते हैं:

फिर ajax इस प्रकार देखा

send.done(function(msg) { 
console.log(msg); 
}) 
+0

यह किसी कारण दोनों पद और बदले अशक्त के रूप में दिखाया जा रहा था जब मैं ऑब्जेक्ट के अंदर एक सरणी या किसी सरणी के अंदर एक सरणी था के लिए उन्हें toghether रखकर भी काम किया जाना चाहिए था, लेकिन यह एक अच्छा समाधान है –

+0

हाँ जिसके कारण मैं करना पड़ा उन्हें विभाजित है और सुनिश्चित करें कि प्रत्येक 'व्यक्ति' 'peoplearray' अंदर एक वस्तु पर थी। आपकी मदद के निकोला के लिए बहुत धन्यवाद। – Zac

7

सभी main_array सबसे पहले एक सरणी लेकिन एक वस्तु क्योंकि जावास्क्रिप्ट में कोई साहचर्य सरणियों कर रहे हैं और इस कारण के लिए

main_array['peoplearray'] = peoplearray; 

main_array.peoplearray = peoplearray; 

के बराबर है और आप जैसे main_array घोषित चाहिए नहीं है यह

var main_array = {}; 

फिर अपने Functio को बदलने का प्रयास करें इस तरह n:

var send = $.ajax({ 
     type: "POST", 
     dataType: "json", 
     cache: false, 
     url: "theurl", 
     data: {data:main_array} 
}); 

और सर्वर साइड

header('Content-type: application/json'); 
$data= $_POST['data']; 
echo json_encode($data); 
+0

सबसे पहले, उत्तर के लिए धन्यवाद। मुझे लगता है मैं वस्तु/सरणी जो मैं में भरने की जरूरत है की एक लापता बुनियादी समझ है। यह अच्छा काम करता है, लेकिन मैं के बावजूद यह पहले दिखा लौटे वस्तु में peoplearray खो देते हैं। मैं php पक्ष पर प्रत्येक संपत्ति को कैसे एक्सेस करूं? – Zac

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