使用javascript

时间:2015-06-01 20:09:30

标签: javascript jquery json post

我正在尝试发布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对象中的转义字符。

JSFIDDLE

1 个答案:

答案 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