在做需求的时候突然发现了一个当时对我来说前后端交互的难点:通过ajax交互的时候整型可以传递,字符型可以传递,那我我们大多数都是传递这两种方式,如果是数组形式,该怎么传递呢?

方法:把对象「数组」变为JSON字符串的形式当作一个参数进行传递,有一个方法 JSON.stringify(value[, replacer[, space]])

参数说明:

  • value:

    必需, 要转换的 JavaScript 值(通常为对象或数组)。

  • replacer:

    可选。用于转换结果的函数或数组。

    如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回 undefined,则排除成员。根对象的键是一个空字符串:""。

    如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。当 value 参数也为数组时,将忽略 replacer 数组。

  • space:

    可选,文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果 space 大于 10,则文本缩进 10 个空格。space 也可以使用非数字,如:\t。

无奈我这边数组是二维数组,而且JSON.stringify() 主要是 用来处理对象与json字符串的关系,所以我们可以在源头先把数组转成object的格式。

var arrays = []
var data = {}
data['name'] = 111;
data['id'] = 222;
arrays.push(data);
data['name'] = 333;
data['id'] = 444;
arrays.push(data);
var json_arrays = JSON.stringify(arrays);

最后所得的json_arrays即为我们所要的json字符串,参数大概长这个样子:"[{"name":"111","id":"222"},{"name":"333","id":"444"}]"。

现在把这个字串当作一个参数经过ajax传入即是可以的,那么传给PHP服务端如何接收呢?众所周知PHP一定会以一个字符串的形式来接收,并且像引号等特殊字符已经被转义成了字符实体,怎么把他恢复到数组的状态呢?

htmlspecialchars_encode(), 这是一个神奇的方法,让我们来先看一下官方的介绍:

那我们把json_arrays参数通过htmlspecialchars_encode跑过后字符实体就原样变成了原始字符,这时我们在用json_decode($something,true) 「第二参数为true则转为数组形式,为flase则转为对象形式」。就可以变成我们想要的数组参数了!