比方說,我有一個JavaScript數組與一堆元素(從50-200的任何地方)。Pass Javascript Array - > PHP
我想用ajax把它發送到PHP(準備好的語句)。目前,我在一個循環內多次php文件.load
,但我想將它轉換爲一個數組併發送一次數組,然後加載一次PHP文件而不是50-200次。
array[i] = variable;
比方說,我有一個JavaScript數組與一堆元素(從50-200的任何地方)。Pass Javascript Array - > PHP
我想用ajax把它發送到PHP(準備好的語句)。目前,我在一個循環內多次php文件.load
,但我想將它轉換爲一個數組併發送一次數組,然後加載一次PHP文件而不是50-200次。
array[i] = variable;
您可以使用JSON.stringify(array)
以JavaScript編碼您的數組,然後在您的PHP腳本中使用$array=json_decode($_POST['jsondata']);
來檢索它。
因此,使用客戶端的循環來構建陣列的二維數組,併發送一個請求到PHP的整個事情。
服務器端,你需要有另一個循環,它會定期爲每個子數組插入/更新。
@Switz我假設你使用[`.get`](http://api.jquery.com/jQuery.get/)或[`$ .post`](http:/ /api.jquery.com/jQuery.post/)調用。 – meagar 2011-02-17 23:02:46
下面是JS數組或對象轉換成一個PHP兼容陣列功能發送的HTTP GET請求參數:
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 [ '一']作爲script.php的數組。您將需要通過提供url來調用js中的script.php,從而找到您最喜愛的ajax引擎。
檢查編輯,希望它讓事情變得清晰。 – 2011-02-17 22:49:46
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>
在這兩種情況下,在服務器端你可以讀取$ _POST變量的數據:
// test.php file
$elements = $_POST['elements'];
$elements = explode(',', $elements);
爲了簡單起見,我加入了e在這裏用逗號省略。不過,JSON序列化是更通用的解決方案。
您可以從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);
?>
JSON是你的朋友:-) – 2011-02-17 22:33:28
我們可以給你的建議的質量受限於你的答案的模糊性。你能發表你正在使用的循環的一些示例代碼嗎? – meagar 2011-02-17 22:36:03
如何通過JSON發送數據/在另一端檢索數據? – switz 2011-02-17 22:47:59