2011-02-17 88 views
45

比方說,我有一個JavaScript數組與一堆元素(從50-200的任何地方)。Pass Javascript Array - > PHP

我想用ajax把它發送到PHP(準備好的語句)。目前,我在一個循環內多次php文件.load,但我想將它轉換爲一個數組併發送一次數組,然後加載一次PHP文件而不是50-200次。

array[i] = variable;

+11

JSON是你的朋友:-) – 2011-02-17 22:33:28

+0

我們可以給你的建議的質量受限於你的答案的模糊性。你能發表你正在使用的循環的一些示例代碼嗎? – meagar 2011-02-17 22:36:03

+1

如何通過JSON發送數據/在另一端檢索數據? – switz 2011-02-17 22:47:59

回答

83

您可以使用JSON.stringify(array)以JavaScript編碼您的數組,然後在您的PHP腳本中使用$array=json_decode($_POST['jsondata']);來檢索它。

0

因此,使用客戶端的循環來構建陣列的二維數組,併發送一個請求到PHP的整個事情。

服務器端,你需要有另一個循環,它會定期爲每個子數組插入/更新。

+0

@Switz我假設你使用[`.get`](http://api.jquery.com/jQuery.get/)或[`$ .post`](http:/ /api.jquery.com/jQuery.post/)調用。 – meagar 2011-02-17 23:02:46

2

下面是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引擎。

+0

檢查編輯,希望它讓事情變得清晰。 – 2011-02-17 22:49:46

22

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序列化是更通用的解決方案。

-1

您可以從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); 

?>