在Ajax的POST和JSON发送特殊字符(Sending special characters i

2019-10-20 18:32发布

@解决了

正如詹姆斯·M·莱解释说,我要改变我的内容类型的application/x-www-form-urlencodedapplication/json

它在一个错误暗示,因为它似乎只有UrlEnconded类型在服务器侧生成POST阵列(至少在PHP)。 所以我不得不改变我接受的方式/应对我的服务器脚本请求

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

if($json) $params = json_decode($json,true);
else $params = $_POST;

我也不得不做出的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{}
}

我有一个问题

我真的建立接收参数的函数写的参数列表,并通过POST发送

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

于是,我就用函数encodeURIComponent将它们编码到一个URI友好字符串。

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

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

另一方面,如果我使用stringify第一和encodeURIComponent它产生像标志“和{}不应该被编码和字符串是不是写得很好JSON

你怎么认为? 是,没有使用jQuery的方法吗? 我一定要建立自己的字符串化功能?

Answer 1:

即时通讯使用下面,我没有问题

encodeURIComponent(JSON.stringify(object_to_be_serialised))


文章来源: Sending special characters in Ajax POST and JSON