我正在尝试发布JSON,但"
将通过%22
进行转义。所以我在POST后在控制台中看到这个:{%22domain%22:%22asdf.com%22,%22playerClass%22:%22asdf%22,%22adTag%22:%22%22}
,我希望在没有双引号被转义的情况下发送它。所以,它应该是这样的:{"domain":"asdf.com","playerClass":"asdf","adTag":""}
我循环遍历表单字段,如下所示:
$.fn.serializeObject = function () {
var o = {};
var a = this.serializeArray();
$.each(a, function () {
if (o[this.name] !== undefined) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
并存储结果如下:
var dataString = JSON.stringify($('form').serializeObject());
我怎样才能使"
成为%22
的目标?正确的格式显示在结果div中,但控制台日志显示JSON对象中的转义字符。
答案 0 :(得分:1)
您将数据作为url参数的一部分传递,jQuery进一步将其视为URI组件,并转义。
$.ajax({
type: "POST",
dataType: "json",
url: "?" + dataString,
...
相反,您应该将其作为数据传递,然后在您的服务器上将其作为表单帖子的一部分进行处理:
$.ajax({
type: "POST",
dataType: "json",
url: "?"
data: dataString,
然后jQuery不会逃避它认为它是一个URI。当然,您实际上不需要自己对这些数据进行字符串化!只需传入本机JS对象,JQuery就会为你进行字符串化。请参阅http://api.jquery.com/jquery.ajax/#jQuery-ajax-settings。