在某些情况下,我需要以编程方式将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数组中。
答案 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)