2011-02-17 17 views
45

मान लें कि मेरे पास तत्वों के समूह (50-200 से कहीं भी) के साथ एक जावास्क्रिप्ट सरणी है।पास जावास्क्रिप्ट ऐरे -> PHP

मैं AJAX का उपयोग करके PHP (तैयार कथन) को भेजना चाहता हूं। वर्तमान में, मैं .load एक लूप फ़ाइल के अंदर कई बार एक php फ़ाइल, लेकिन मैं इसे एक सरणी में रूपांतरित करना चाहता हूं और एक बार सरणी भेजना चाहता हूं, 50-200 बार के बजाय PHP फ़ाइल लोड कर रहा हूं।

array[i] = variable;

+11

JSON आपका मित्र है :-) –

+0

हम जो सलाह दे सकते हैं उसकी गुणवत्ता आपके उत्तर की अस्पष्टता से सीमित है। क्या आप लूप का कुछ नमूना कोड पोस्ट कर रहे हैं जिसका आप उपयोग कर रहे हैं? – meagar

+1

मैं JSON के माध्यम से डेटा कैसे भेज सकता/इसे दूसरे छोर पर पुनर्प्राप्त कर सकता हूं? – switz

उत्तर

83

आप जावास्क्रिप्ट में अपनी सरणी को एन्कोड करने के लिए JSON.stringify(array) का उपयोग कर सकते हैं और फिर इसे पुनर्प्राप्त करने के लिए अपनी PHP स्क्रिप्ट में $array=json_decode($_POST['jsondata']); का उपयोग कर सकते हैं।

+11

अपने इनपुट को स्वच्छ करने के लिए मत भूलना, या आप टोस्ट हैं! : डी – Stephen

+10

आपको यह मानना ​​चाहिए कि आपकी PHP स्क्रिप्ट्स में कोई भी इनपुट दुर्भावनापूर्ण इरादों वाले किसी व्यक्ति द्वारा समझौता किया जा सकता था। 'JSON.stringify (array) 'का उपयोग करने के बाद' htmlsities()' – Gareth

+0

@Gareth के माध्यम से 'mysql_real_escape_string()' के माध्यम से किसी भी डेटाबेस को डेटाबेस क्वेरी में डालने की योजना बना रहे हैं, और कुछ भी जो स्क्रीन पर रखा जाएगा, क्या आपको इसे JSON ऑब्जेक्ट शाब्दिक में डालना है, जैसे 'datavar = {array: array}'? या आप अपने .getJSON() अनुरोध के पैरामीटर में 'डेटावार' के स्थान पर 'सरणी' पास कर सकते हैं? जैसे '.get (script.php, सरणी, फ़ंक्शन (डेटा) {... '। साथ ही, क्या यह हमेशा आपके $ _POST के भीतर' jsondata' है? – LazerSharks

0

तो अपने सरणियों के एक दो आयामी सरणी का निर्माण करने के लिए क्लाइंट-साइड पाश का उपयोग, और एक अनुरोध में PHP के लिए पूरे बात भेजें।

सर्वर-साइड, आपको एक और लूप रखना होगा जो प्रत्येक उप-सरणी के लिए नियमित रूप से सम्मिलित/अद्यतन करता है।

function obj2url(prefix, obj) { 
     var args=new Array(); 
     if(typeof(obj) == 'object'){ 
      for(var i in obj) 
       args[args.length]=any2url(prefix+'['+encodeURIComponent(i)+']', obj[i]); 
     } 
     else 
      args[args.length]=prefix+'='+encodeURIComponent(obj); 
     return args.join('&'); 
    } 

उपसर्ग एक पैरामीटर नाम है:

+0

@ स्विस मैं मानता हूं कि आप ['$ .get'] (http://api.jquery.com/jQuery.get/) या [' $ .post'] के 'डेटा' पैरामीटर का उपयोग कर रहे थे (http://api.jquery.com/jQuery.post/) कॉल करें। – meagar

2

यहाँ एक समारोह एक php-संगत सरणी में js सरणी या वस्तु के रूप में परिवर्तित करने के लिए HTTP GET अनुरोध पैरामीटर भेजे जाने के लिए है।

संपादित करें:

var a = { 
    one: two, 
    three: four 
}; 

alert('/script.php?'+obj2url('a', a)); 

उत्पादन होगा

/script.php?a[one]=two&a[three]=four 

जो आप script.php में एक सरणी के रूप में $ _GET [ 'एक'] का उपयोग करने की अनुमति देगा। जेएस से script.php को कॉल करने के लिए आपको यूआरएल की आपूर्ति पर अपने पसंदीदा AJAX इंजन में अपना रास्ता समझने की आवश्यकता होगी।

+0

संपादन की जांच करें, उम्मीद है कि यह आपके लिए चीजों को स्पष्ट करता है। –

+0

कोई 2url क्या है? – Alex

22

AJAX अनुरोध <form> तत्व के माध्यम से जीईटी और POST अनुरोधों से अलग नहीं हैं। जिसका अर्थ है कि आप डेटा पुनर्प्राप्त करने के लिए $ _GET और $ _POST का उपयोग कर सकते हैं।

जब आप एक AJAX अनुरोध (jQuery उदाहरण) कर रहे हैं:

// JavaScript file 

elements = [1, 2, 9, 15].join(',') 
$.post('/test.php', {elements: elements}) 

यह (लगभग) इस फार्म पोस्टिंग के बराबर:

<form action="/test.php" method="post"> 
    <input type="text" name="elements" value="1,2,9,15"> 
</form> 

दोनों मामलों में, सर्वर साइड आप पर $ _POST चर से डेटा पढ़ सकते हैं:

// test.php file 

$elements = $_POST['elements']; 
$elements = explode(',', $elements); 

सादगी के लिए मैं ई में शामिल हो रहा हूं यहां अल्पविराम के साथ पट्टे। जेएसओएन क्रमबद्धता एक और सार्वभौमिक समाधान है, यद्यपि।

+1

मुझे नहीं पता कि यह क्यों स्वीकार नहीं किया गया है क्योंकि यह बिल्कुल ठीक है ओपी ने पूछा और कम परेशानी, especi का कारण बनता है सहयोगी है कि कुछ ढांचे स्वचालित रूप से आपके लिए पोस्ट एरे विस्फोट करते हैं – zakius

-1

आप PHP के लिए जावास्क्रिप्ट से सरणी हस्तांतरण कर सकते हैं ...

जावास्क्रिप्ट ... ArraySender.html

<script language="javascript"> 

//its your javascript, your array can be multidimensional or associative 

plArray = new Array(); 
plArray[1] = new Array(); plArray[1][0]='Test 1 Data'; plArray[1][1]= 'Test 1'; plArray[1][2]= new Array(); 
plArray[1][2][0]='Test 1 Data Dets'; plArray[1][2][1]='Test 1 Data Info'; 
plArray[2] = new Array(); plArray[2][0]='Test 2 Data'; plArray[2][1]= 'Test 2'; 
plArray[3] = new Array(); plArray[3][0]='Test 3 Data'; plArray[3][1]= 'Test 3'; 
plArray[4] = new Array(); plArray[4][0]='Test 4 Data'; plArray[4][1]= 'Test 4'; 
plArray[5] = new Array(); plArray[5]["Data"]='Test 5 Data'; plArray[5]["1sss"]= 'Test 5'; 

function convertJsArr2Php(JsArr){ 
    var Php = ''; 
    if (Array.isArray(JsArr)){ 
     Php += 'array('; 
     for (var i in JsArr){ 
      Php += '\'' + i + '\' => ' + convertJsArr2Php(JsArr[i]); 
      if (JsArr[i] != JsArr[Object.keys(JsArr)[Object.keys(JsArr).length-1]]){ 
       Php += ', '; 
      } 
     } 
     Php += ')'; 
     return Php; 
    } 
    else{ 
     return '\'' + JsArr + '\''; 
    } 
} 


function ajaxPost(str, plArrayC){ 
    var xmlhttp; 
    if (window.XMLHttpRequest){xmlhttp = new XMLHttpRequest();} 
    else{xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");} 
    xmlhttp.open("POST",str,true); 
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    xmlhttp.send('Array=' + plArrayC); 
} 

ajaxPost('ArrayReader.php',convertJsArr2Php(plArray)); 
</script> 

और PHP कोड ... ArrayReader।PHP

<?php 

eval('$plArray = ' . $_POST['Array'] . ';'); 
print_r($plArray); 

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