如何将javascript对象的数组传递给php?

时间:2014-08-28 20:27:14

标签: javascript php json

我有一堆需要传递给服务器的值,我似乎无法使用JSON解码等基本功能。这里有些东西,我会很感激有人看看它

我有一个动态生成的表,其中包含可编辑的值,当用户单击“添加”按钮时,我将其抓取,将其推入阵列并通过ajax调用将其发送到服务器。这是我从console.log(数据)复制的示例数据;线。

var data = params + "&Details="+JSON.stringify(Details);
console.log(data);     // &Id[]=1566&aId[]=1567&Details=[["1566","First File","sdf.pdf","general","file","",""],["1567","2nd file","test.png","image","file","",""]] 

$.ajax({
    type: 'POST',
    url: editUrl,
    dataType: 'json',
    data: data,
    success: function() { console.log('success'); }
    error: function() { console.log('error'); }
});

在服务器端,我获取数据但我无法将其解析为可用格式

$ids = ($_POST['Id']);    // this is a valid array
$details = ($_POST['Details']);     // [[ 1566 , First File ,  , general , file ,  ,  ],[ 1567 , 2nd file ,  , image , file ,  ,  ]]
$details = json_decode($details);   // getting JSON_ERROR_CTRL_CHAR error and null is returned

知道这里有什么问题吗?

4 个答案:

答案 0 :(得分:1)

您需要正确编码JSON:

var data = params + "&Details="+encodeURIComponent(JSON.stringify(Details));

然而,恕我直言,将data作为对象而不是字符串会更好。

var data = {
    Id: [ 1566, 1567],
    Details: JSON.stringify(Details)
};

您需要更改创建params的方式,以便生成对象。然后,您可以使用$.extend()合并它们:

var data = $.extend({}, params, { Details: JSON.stringify(Details) });

答案 1 :(得分:0)

你的ajax参数在成功函数后缺少comma,并尝试从服务器定义成功函数回调作为数据,然后在php服务器中使用json_encode作为你的数组数据。

$.ajax({
   type: 'POST',
   url: editUrl,
   dataType: 'json',
   data: data,
   success: function(data) { console.log(data); },
   error: function() { console.log('error'); }
});

答案 2 :(得分:0)

不确定如何构建params变量或为什么。但如果它只是通过ajax发送你不必。 ajax的数据参数将为您完成此操作。为它添加一个对象,其中包含您要发送的名称/值对。

$.ajax({
  type: 'POST',
  url: editUrl,
  dataType: 'json',
  data: { 
    Id: [2566],
    aId: [1567],
    Details: Details,
    Other: 'Hi',
    AnotherId: 1234
  }
  success: function() { console.log('success'); }
  error: function() { console.log('error'); }
});

在服务器上查看所有$ _POST变量,以了解发送的内容和格式

<?php
  echo '<pre>'
  print_r($_POST);
?>

答案 3 :(得分:-2)

尝试json_decode(stripslashes($details))