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

标签 javascript ajax json stringify encodeuricomponent

@已解决

正如 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;

我还必须对 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 发送到服务器。

另一方面,如果我首先使用 stringifyencodeURIComponent,它会生成诸如 "和 { } 之类的符号,这些符号不应该被编码,并且字符串不是很好的写成JSON

你是怎么做到的?这是不使用 jQuery 的方法吗?我必须构建自己的 stringify 函数吗?!

最佳答案

我正在使用以下内容,我没有遇到任何问题

encodeURIComponent(JSON.stringify(object_to_be_serialised))

关于javascript - 在 Ajax POST 和 JSON 中发送特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25466560/

相关文章:

javascript - jQuery SlideToggle() 回调函数

javascript - void 运算符在 javascript 中是如何工作的

android - 在 android 中写入现有 JSON 文件时遇到问题

php - 从 mysql 检索数据返回相同的 3 行

javascript - 存在哪些 Express websocket 事件?

java - 执行 php 文件从 SQL 数据库获取信息时如何上传数据用作过滤器?

javascript - 解析 AJAX HTML 响应 : I can find the elements but not access their innerHTML or values?

JavaScript 将字符串和整数从 PHP 传递到函数中

Android:从服务器中提取数据?

javascript - 如何强制 TypeScript 允许 null 作为索引类型?