如何在ajaxSend中正确添加数据参数?

时间:2014-01-08 09:11:41

标签: javascript php jquery ajax jquery-1.4

在某些情况下,我需要以编程方式将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');
});

但additional_key没有出现在$ _POST数组中。

3 个答案:

答案 0 :(得分:9)

您可以使用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/

答案 1 :(得分: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。

答案 2 :(得分:0)

$(document).ready(function() {
    $(document).ajaxSend(function(event, jqXHR, ajaxOptions) {
        if (ajaxOptions.extraData) {
            ajaxOptions.extraData.additional_key = 'additional_value';
        }
    });
});

这只适用于我(jQuery 1.4.4)