通过Javascript数组 – > PHP

比方说,我有一个JavaScript数组与一堆的元素(从50-200的任何地方)。

我想发送到PHP(准备语句)使用Ajax。 目前,我在一个循环内多次加载一个php文件,但是我想把它转换成一个数组并发送一次,加载一次PHP文件,而不是50-200次。

array[i] = variable;

你可以使用JSON.stringify(array)在JavaScript中对你的数组进行编码,然后使用$array=json_decode($_POST['jsondata']); 在你的PHP脚本中检索它。

AJAX请求与通过<form>元素发起的GET和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> 

在这两种情况下,在服务器端可以读取$ _POSTvariables中的数据:

 // test.php file $elements = $_POST['elements']; $elements = explode(',', $elements); 

为了简单起见,我在这里用逗号join元素。 但是,JSON序列化是更通用的解决scheme。

这里有一个函数将js数组或对象转换为php兼容的数组,作为http获取请求参数发送:

 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('&'); } 

前缀是一个参数名称。

编辑:

 var a = { one: two, three: four }; alert('/script.php?'+obj2url('a', a)); 

会产生

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

这将允许您使用$ _GET ['a']作为script.php中的数组。 您将需要通过提供url来调用js中的script.php来进入您最喜欢的ajax引擎。

因此,使用客户端循环来构build数组的二维数组,然后在一个请求中将整个事件发送到PHP。

服务器端,你需要有另一个循环,它会定期插入/更新每个子数组。

您可以将数组从JavaScript传输到PHP …

Javascript … 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); ?>