在Ajax POST和JSON中发送特殊字符

Vic*_*ira 1 javascript ajax json encodeuricomponent stringify

@解决了

正如James M. Lay所解释的那样,我应该将我的内容类型application/x-www-form-urlencoded改为application/json

它隐含在一个错误中,因为似乎只有UrlEnconded类型在服务器端生成POST数组(至少在PHP中).所以我不得不改变我在服务器脚本中接收/处理请求的方式

$json = file_get_contents('php://input'); //yes. php://input

if($json) $params = json_decode($json,true);
else $params = $_POST;
Run Code Online (Sandbox Code Playgroud)

我还必须在Javascript代码中进行一些更改以检查内容类型并生成不同的字符串.如果它是JSON我只是使用JSON.stringify

//string to use in the 'send' method
this.getParametersString = function(){
        if(this.contentType == 'application/json'){
            return JSON.stringify(this.parameters);
        }else{}
}
Run Code Online (Sandbox Code Playgroud)

我有一个问题

我正在构建一个函数,它接收参数以写入参数列表并通过POST发送它

问题是我们不能发送特殊字符,例如 +

所以我尝试使用该函数encodeURIComponent将它们编码为URI友好字符串.

还有另外一个问题:如果收到的参数是一个对象,我循环遍历属性,检查它是否是另一个对象或字符串,如果它是一个对象,再次循环,否则编码它.

但它返回一个编码字符串的对象.我必须使对象成为发送它的字符串,为此我使用JSON.stringify.它解码编码的字符串.所以再次%2B成为+,它不会通过POST发送到服务器.

另一方面,如果我stringify先使用encodeURIComponent它,它会生成不应该编码的"和{}等符号,而且字符串不是写得很好的JSON

那你怎么样?这是不使用jQuery的方式吗?我是否必须构建自己的stringify函数?!

小智 7

我使用以下,我没有问题

encodeURIComponent(JSON.stringify(object_to_be_serialised))
Run Code Online (Sandbox Code Playgroud)