2012-08-23 16 views
5

पर XMLHttpRequest का उपयोग करके सरणी कैसे भेजें, जैसा कि मुझे AJAX का उपयोग करने के बारे में पता है, आप सर्वर पर डेटा भेज सकते हैं लेकिन मैं XMLHttpRequest का उपयोग करके पोस्ट करने के लिए एक सरणी भेजने के बारे में उलझन में हूं जैसे कि jQuery जैसी कोई लाइब्रेरी नहीं। मेरा सवाल यह है कि, phpXMLHttpRequest का उपयोग करके पर एक सरणी भेजना संभव है और jQuery PHP पर एक सरणी कैसे भेजता है, मेरा मतलब है कि jQuery सर्वर (php $ _POST) में सरणी भेजने के लिए कोई अतिरिक्त काम करता है?सर्वर

उत्तर

10

ठीक है आप बाइट्स की एक स्ट्रिंग के अलावा कुछ भी नहीं भेज सकते हैं। "सरणी भेजना" सरणीकरण (ऑब्जेक्ट्स की स्ट्रिंग प्रस्तुति) बनाना और सरणी द्वारा किया जाता है। सर्वर तब स्ट्रिंग को पार्स करेगा और इसमें से मेमोरी ऑब्जेक्ट्स को फिर से निर्मित करेगा।

तो पीएचपी के लिए खत्म हो [1,2,3] भेजने इसलिए की तरह हो सकता है:

var a = [1,2,3], 
    xmlhttp = new XMLHttpRequest; 

xmlhttp.open("POST", "test.php"); 
xmlhttp.setRequestHeader("Content-Type", "application/json"); 
xmlhttp.send('[1,2,3]'); //Note that it's a string. 
          //This manual step could have been replaced with JSON.stringify(a) 

test.php:

$data = file_get_contents("php://input"); //$data is now the string '[1,2,3]'; 

$data = json_decode($data); //$data is now a php array array(1,2,3) 

Btw, jQuery के साथ आप बस करना होगा:

$.post("test.php", JSON.stringify(a)); 
+1

धन्यवाद । क्या आप 'file_get_contents ("php: // input") समझा सकते हैं; '? –

+1

@Red यह अनुरोध के शरीर का कच्चा प्रतिनिधित्व है। Http://php.net/manual/en/wrappers.php.php देखें। उदाहरण के लिए, सामान्य फॉर्म सबमिट पर विचार करें, जहां आपके पास '$ _POST [" कुंजी "] ===" मान "' है। 'Php: // input" की सामग्री इस मामले में '" key = value "' है, जो PHP आपके लिए '$ _POST' सरणी बनाने के लिए उपयोग की जाती है। आपको इसे यहां उपयोग करने की आवश्यकता है क्योंकि JSON पोस्ट करते समय, php '$ _POST' भरता नहीं है (क्योंकि' $ _POST' केवल फ़ॉर्म के लिए काम करता है, JSON नहीं)। – Esailija

+0

फिर मैं '$ name = $ _ POST [' name '] के रूप में डेटा कैसे प्राप्त करता हूं, जब मैं '$ .post' का उपयोग करता हूं? –

1

कि प्रोटोकॉल आप अपने डेटा संरचना पैकेज के लिए चुनते हैं पर निर्भर करता है। 2 सबसे अधिक इस्तेमाल किया जाने वाला एक्सएमएल और जेएसओएन है।

JSON: ['one thing', 'another thing']

एक्सएमएल: दोनों एक सरणी घोषित करने के लिए तरीके हैं <things><thing name='one thing' /><thing name='another thing' /></things>

और न सर्वर द्वारा किसी भी महत्वपूर्ण अतिरिक्त काम का समय लगेगा। कई मामलों में यह वास्तव में काम को कम करेगा क्योंकि आपको उनके बीच अंतर करने के लिए नामकरण सम्मेलन का उपयोग करने की आवश्यकता नहीं है।