在ajax驱动的站点中,我使用ajaxSetup添加了一些默认数据,如下:
var revision = '159';
$.ajaxSetup({
dataType: "text json",
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
data: {
r: revision
}
});
这是为了确保在部署新修订版并且前端从后端请求html模板或json-data时出现缓存丢失。因此,后端和前端共享相同的修订号。
问题在于,当前端执行PUT,POST或DELETE时,后端对于获取参数’r’有点不满意。没有办法告诉jQuery的ajax仅在执行GET请求时才使用此数据,而在执行POST,PUT或DELETE请求时则不应该使用此数据。
更新:
因为我知道,所以我首先尝试了beforeSend函数。但是可以更改settings.data,但是在beforeSend返回时,任何更改似乎都消失了。可能是我的错…
:-)
我已经选择了ajaxPreFilter。不过这并不容易。options.data不是对象,而是$
.param(object)的结果,因此第一个挑战是取消参数化。我结束了这个:
var revision = '159';
$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
// do not send data for POST/PUT/DELETE
if (originalOptions.type !== 'GET' || options.type !== 'GET') {
return;
}
var data = originalOptions.data;
if (originalOptions.data !== undefined) {
if (Object.prototype.toString.call(originalOptions.data) === '[object String]') {
data = $.deparam(originalOptions.data); // see http://benalman.com/code/projects/jquery-bbq/examples/deparam/
}
} else {
data = {};
}
options.data = $.param($.extend(data, { r: revision }));
});