在我加入使用ajaxSetup一些默認數據的Ajax驅動的網站,鼻翼這樣的:jQuery的ajaxSetup - 我想補充的默認數據GET請求僅
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請求時使用。
UPDATE:
我第一次嘗試了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 }));
});
看起來它是在http://bugs.jquery.com/ticket/9757 – Ritesh