1

在某些情况下,我需要以编程方式将 POST 参数添加到 AJAX 请求中。

我正在尝试这样的事情:

$(document).ajaxSend(function(event, jqXHR, ajaxOptions) {
    ajaxOptions.data = "additional_key=additional_value&" + ajaxOptions.data;
    ajaxOptions.context.data = "additional_key=additional_value&" + ajaxOptions.context.data;
    console.log(ajaxOptions, 'ajaxOptions');
});

但是附加键没有出现在 $_POST 数组中。

4

3 回答 3

10

您可以ajaxPrefilter为此使用:

$.ajaxPrefilter(function(options, originalOptions, jqXHR) {
    if (originalOptions.type !== 'POST' || options.type !== 'POST') {
        return;
    }

    options.data = $.extend(originalOptions.data, { yourdata : yourvalue });
});

有关更多信息,请参阅http://api.jquery.com/jquery.ajaxprefilter/

于 2014-01-08T09:18:25.713 回答
2

测试你上面的代码给了我一个ajaxOptions.context未定义的错误。

首先,我建议您先检查是否存在:(假设将要定义上下文)

if(ajaxOptions.context) {
    ajaxOptions.context.data = "additional_key=additional_value&" + ajaxOptions.context.data;
} else {
    ajaxOptions.data = "additional_key=additional_value&" + ajaxOptions.data;
}

发送模拟 AJAX 请求向我表明,在 Firebug 中检查数据时正在传递数据。

我通过删除上下文行来测试代码,它似乎工作:

代码:

$(document).ajaxSend(function(event, jqXHR, ajaxOptions) {
    if(ajaxOptions.context) {
        ajaxOptions.context.data = "additional_key=additional_value&" + ajaxOptions.context.data;
    } else {
        ajaxOptions.data = "additional_key=additional_value&" + ajaxOptions.data;
    }
});

$.ajax({
    'url': 'test.php',
    'data': {'foo':'bar'},
    'type': 'POST'
});

检查:

Key             Value
additional_key  additional_value
foo             bar

编辑:使用 JQuery 1.7.1 测试我注意到您正在运行较低版本的 jQuery。

于 2014-01-08T09:25:34.443 回答
0
$(document).ready(function() {
    $(document).ajaxSend(function(event, jqXHR, ajaxOptions) {
        if (ajaxOptions.extraData) {
            ajaxOptions.extraData.additional_key = 'additional_value';
        }
    });
});

这只对我有用(jQuery 1.4.4)

于 2014-01-08T15:08:23.953 回答