0

在 JS 中,我有以下内容:

var languages = [{
    language: "da"
    listening: "A1"
}, {
    language: "en"
    listening: "B2"
}];

在 PHP 中,调用后我最终得到的$.ajax是:

array(4) {
  [0]=>
  array(1) {
    ["language"]=>
    string(2) "da"
  }
  [1]=>
  array(1) {
    ["listening"]=>
    string(2) "A1"
  }
  [2]=>
  array(1) {
    ["language"]=>
    string(0) "en"
  }
  ...
}

我需要的是这样的:

array(2) {
  [0]=>
  array(2) {
    ["language"]=>
    string(2) "da",
    ["listening"]=>
    string(2) "A1"
  }
  [1]=>
  array(2) {
    ["language"]=>
    string(2) "en",
    ["listening"]=>
    string(2) "B1"
  }
}

有没有办法简单地做到这一点?我必须迭代和处理它吗?

4

3 回答 3

3

用于JSON.stringify对您的数据结构进行编码,将结果字符串作为单个参数发送,然后json_decode($json, true)在 PHP 中对其进行解码。

JS

var data = [
   { language: "da", listening: "A1"}, 
   { language: "en", listening: "B2"}
];
// ...
$.post(url, { data: JSON.stringify(data) }, function() { ... });

PHP

if (isset($_POST['data'])) {
  $data = json_decode($_POST['data'], true);
  // process this array of arrays
} 
于 2013-09-29T07:45:33.493 回答
1

我假设你的意思是这样的:

var languages = [{
    language: "da"
    listening: "A1"
}, {
    language: "en"
    listening: "B2"
}];

所以你实际上有两个对象要传输到 PHP,打包成一个数组,对吧?尝试使用 JSON:

创建一个 JSON 字符串并将其发送到服务器:

$.ajax({
    url: '...',
    type: 'POST',
    data: { json: JSON.stringify(languages)}
});

在服务器端,您现在将在 $_POST['json'] 中拥有 json 字符串,您可以使用以下命令对其进行解码:

json_decode($_POST['json'], true); 

得到一个(多维)数组,或者

json_decode($_POST['json']); 

对于包含两个对象的数组。

编辑

如果你有“Magic Quotes”,你必须先去掉反斜杠:

json_decode(stripslashes($_POST['json']), true); 

高温下,

于 2013-09-29T07:51:05.293 回答
0

你好:

我认为你应该尝试如下javascript

{
    "languages": [
        {"language":"da","listening":"A1"},
        {"language":"en", "listening":"B2"}
    ]
}
于 2013-09-29T08:15:30.363 回答