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

2024-03-17

@SOLVED

正如 James M. Lay 所解释的,我应该将我的内容类型从application/x-www-form-urlencoded to application/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 的方法吗?我必须构建自己的 stringify 函数吗?!


我使用以下内容并且没有任何问题

encodeURIComponent(JSON.stringify(object_to_be_serialised))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Ajax POST 和 JSON 中发送特殊字符 的相关文章

随机推荐