2013-05-09 31 views
1

我试图从发送数组JavaScriptPHP与Jquery的$.post()方法。在ajax查询中发送数组

我试过jQuery.serialize(),jQuery.serializeArray(), JSON.stringify(),他们都没有工作。

这是我的代码:

$.post("ajax/"+action+"_xml.php",{'array': array},function(data){console.log(data);}); 

阵列看起来像这样:

array["type"] 
array["vars"]["name"] 
array["vars"]["email"] 

阵列[ “瓦尔”]有2层以上的元件。

我的php $_POST变量的结果是一个空数组(长度为0)。

回答

1

我建议上的数据,您通过以下结构:

的Javascript:

var DTO = { 
    type: [1,2,3], 
    vars: { 
     name: 'foo', 
     email: '[email protected]' 
    } 
}; 

var stringifiedData = JSON.stringify(DTO); 

// will result in: 
//{"type":[1,2,3],"vars":{"name":"foo","email":"[email protected]"}} 

$.post("ajax/"+action+"_xml.php",{'DTO': stringifiedData },function(data){ 
    console.log(data); 
}); 

PHP:

header('Cache-Control: no-cache, must-revalidate'); 
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 
header('Content-type: application/json'); 

$DTO = $_POST['DTO']; 

if(isset($DTO)) 
{ 
    $assocResult = json_decode($DTO, true); 
    var_dump($assocResult); //do stuff with $assocResult here 
} 

传递true作为第二个参数json_decode将使它返回一个关联联合数组。

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

+0

谢谢,我喜欢你。我建立了一个对象而不是一个数组,并且我使用了'JSON.stringify',并在我的php中使用了'json_decode'。一切都很完美,坦克很棒。 – Wanceslas 2013-05-09 20:58:18

+0

@Wanceslas没问题,很高兴听到它为你工作。 – Johan 2013-05-09 20:59:27

+0

+1样品和两侧的细节。 。 。如果它解释了为什么之前的方法不起作用,那将是完美的。 。 。 – ernie 2013-05-09 21:03:39

0

我不知道你是否能像发布一个数组。

拆分它应该只是罚款:

$.post("ajax/"+action+"_xml.php",{'type': array["type"], 'name' : array["vars"]["name"],...},function(data){console.log(data);}); 
+0

考虑到数十个密钥的阵列,这种方法可能不是最好的。 (可能性) – 2013-05-09 20:42:28

0

你需要把你的JavaScript数组转换为字符串,因为这是所有post()方法接受。大多数人通过converting their array to JSON来做到这一点。

+0

为什么downvote? – ernie 2013-05-09 20:43:32

+0

由于您的回答没有任何问题,因此您可以点击此处取消;) – Johan 2013-05-09 20:54:29