2011-08-04 5 views
16

के माध्यम से पीएचपी के लिए जावास्क्रिप्ट वस्तु भेजा जा रहा है:मैं असफलता से अजाक्स सीख रहा हूँ और एक दीवार से टकरा दिया है अजाक्स

मैं एक सरणी है (अगर यह मायने रखती है, सरणी भंडारण है नंबर आईडी के क्या उपयोगकर्ता के चेक चेक बॉक्स के आधार पर) जो जावास्क्रिप्ट में लिखा गया है।

मेरे पास एक ऐसा फ़ंक्शन है जिसे उपयोगकर्ता 'सेव' बटन पर क्लिक करते समय बुलाया जाता है।

function createAmenities() { 
    if (window.XMLHttpRequest) { 
     //code for IE7+, Firefox, Chrome and Opera 
     xmlhttp = new XMLHttpRequest(); 
    } 
    else { 
     //code for IE6, IE5 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    xmlhttp.onreadystatechange = function() { 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
      document.getElementById('message').innerHTML = xmlhttp.responseText; 
     } 
    } 

    var url = "create_amenities.php"; 

    xmlhttp.open("GET", url, true); 

    xmlhttp.send(); 

} 

मेरा प्रश्न है: क्या मैं इस समारोह में डाल PHP स्क्रिप्ट मैं ('create_amenities.php') कॉल करने के लिए कोशिश कर रहा हूँ में सरणी खींचने के लिए कर सकते हैं समारोह इस प्रकार है?

इसके अलावा, क्या मुझे JSON का उपयोग करने का प्रयास करना चाहिए? और यदि हां, तो मैं AJAX के माध्यम से JSON ऑब्जेक्ट कैसे भेज सकता हूं?

अग्रिम धन्यवाद।

उत्तर

44

यदि आपके सरणी में 1 आयाम है या एक सहयोगी सरणी है तो आपको JSON का उपयोग करना चाहिए।

जेसन एक स्ट्रिंग में एक पूर्ण सरणी संरचना बदल जाता है। यह स्ट्रिंग आसानी से आपके PHP अनुप्रयोग को भेज सकती है और एक php सरणी में वापस आ सकती है। json पर

अधिक जानकारी: http://www.json.org/js.html

var my_array = { ... }; 
var json = JSON.stringify(my_array); 

php में आप json_decode साथ स्ट्रिंग डिकोड कर सकते हैं:

http://www.php.net/manual/en/function.json-decode.php

var_dump(json_decode($json)); 
+3

यह एक साफ समाधान (+1) है। बस पूर्णता के लिए: सरणी भी 'my_array = [...] 'हो सकती है और' json = JSON.stringify (my_array) 'के बाद इसे' url = "create_amensions.php? Json" के रूप में भेजा जाता है; ' – Jiri

+0

+1: संक्षिप्त, पढ़ने के लिए आसान कोड के साथ बहुत अच्छी तरह से काम करता है। – FreeAsInBeer

+0

क्या आप कृपया मुझे समझने में मदद कर सकते हैं कि जावास्क्रिप्ट में मैंने जो सरणी बनाई है, उसे ऑब्जेक्ट में परिवर्तित क्यों किया जाता है जब मैं इसे अनुरोध पैरा के माध्यम से php में प्राप्त करता हूं? बीटीडब्ल्यू आपके जवाब ने मेरा दिन बचाया.धन्यवाद! – Simer

1

सरणी पर लूप और प्रत्येक बार क्वेरी स्ट्रिंग में encodeURIComponent('keyname[]') + '=' + encodeURIComponent(theArray[i]) + '&' संलग्न करें।

इसके अलावा, क्या मुझे JSON का उपयोग करने का प्रयास करना चाहिए?

आप कर सकते हैं, लेकिन इसका मतलब यह होगा कि सामान्य रूप से हैंडलिंग की देखभाल करने के बजाय जेएसओएन को दूसरे छोर पर डीकोड करना होगा।

और यदि हां, तो मैं AJAX के माध्यम से JSON ऑब्जेक्ट कैसे भेज सकता हूं?

no such thing as a JSON object है। JSON एक स्ट्रिंग का रूप लेता है, और आप क्वेरी स्ट्रिंग्स में तार शामिल कर सकते हैं (बस encodeURIComponent पर याद रखें)।

-2

पहले, हाँ, ajax हाथ से नहीं लिखते । आप ऐसा कुछ भी तैयार करने की संभावना नहीं है जो वास्तव में सभी ब्राउज़रों पर काम करता हो।

आपकी वास्तविक समस्या का सबसे अच्छा तरीका आपके सरणी को सीजीआई पैरामीटर के रूप में सबमिट करना होगा।

चेक बॉक्स एक रूप में हैं, तो आप बहुत कम करने की जरूरत है - बस फ़ॉर्म सबमिट करेंगे,

<form><input type=checkbox ...><input type=checkbox ...> 
$.post("test.php", $("#testform").serialize()); 

कि कैसे करना है के बारे में अधिक जानकारी के लिए http://api.jquery.com/jQuery.post/ देखें। आपकी सूची PHP में एक सरणी के रूप में बदल जाएगी।

या बहुत सरल कुछ के साथ अपने स्वयं उदाहरण बढ़ाने के लिए, ऐसा करते हैं:

url = url + '?checkboxes=' + checkboxes.join(','); 

अब बस यह पीएचपी अंदर विभाजित है और आप इसे वापस मिल गया है!

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