4

我有一个文本字段,它通过 JSON 和 jQuery(用.toJSON函数包装)通过 AJAX 和 POST 请求发送到我的服务器。在 PHP 方面,我正在做json_decode.

一切正常,但如果我将 & 号 (&) 放在里面,它会拆分 POST 参数,因此它在 PHP 端是不完整的(至少var_dump($_POST)是写出的内容)。

toJSON 和 json_decode 不应该完成所有工作(转义)吗?我试过了encodeURIComponent& to && to \u0026它不起作用。

我做错了什么?

AJAX 调用

function execute() {
    this.setupUrl();
    return $.ajax({
        type: this.requestMethod,
        data: this.getDataParams(),
        url: this.url
    });
}

function getDataParams() {
    if(this.data != undefined) {
        if(this.requestMethod == 'POST' || this.requestMethod == 'PUT') {
            return "data=" + $.toJSON(this.data);
        } else if(this.requestMethod == 'GET') {
            return this.data;
        }
    } else {
        return null;
    }
}
4

4 回答 4

3

&应编码为%26. 找到这样做的东西。

于 2012-06-03T22:36:26.573 回答
2

答案很简单:使用对象data而不是字符串。

例如,像这样更改您的功能:

return {data: $.toJSON(this.data)};

无论您使用的是 POST 还是 GET,这在任何情况下都有效。

于 2012-06-03T22:37:54.487 回答
0

你不需要“数据”的东西,因为你已经在 execute()

if(this.requestMethod == 'POST' || this.requestMethod == 'PUT') {
                return $.toJSON(this.data);
            }
于 2012-06-03T22:41:42.340 回答
0

这很奇怪。PHP 和 JS 一起工作了很多年。没想到 php 无法解码 js 编码的内容。所以我需要一个特殊的函数来处理这个。

function damn_ampersand(str){
    return str.replace('&', '%26');
}
obj = {"ololo": damn_ampersand("atata & foobar")}
json = JSON.stringify(obj);
于 2017-03-05T08:39:19.257 回答