gpt4 book ai didi

javascript - 在执行任何绑定(bind)回调之前修改 ajax 响应

转载 作者:行者123 更新时间:2023-12-01 02:32:29 25 4
gpt4 key购买 nike

问题

我需要一种方法来在触发所有绑定(bind)回调之前修改应用程序中的所有 ajax 响应。

解决方案

标准 ajax 事件(全局和本地)都没有提供在触发应用程序绑定(bind)回调之前修改响应的好方法。

ajax 事件的触发顺序是 jquery's ajax event docs 中指示的顺序。即

  • ajaxStart(全局事件)
  • beforeSend(本地事件)
  • ajaxSend(全局事件)
  • 成功(本地事件)
  • ajaxSuccess(全局事件)
  • 错误(本地事件)
  • ajaxError(全局事件)
  • 完成(本地事件)
  • ajaxComplete(全局事件)
  • ajaxStop(全局事件)

请注意,在从服务器返回响应之后但在运行成功/错误回调之前,没有执行任何钩子(Hook),例如一种在 ajaxSend 之后但在 success|error

之前的 ajaxReturn

我破解这个的方法是使用 $.ajaxPrefilter它在 ajaxStart 之前执行,并将已绑定(bind)的成功/错误回调包装在另一个函数中,这将允许我修改 options 对象,从而修改返回的数据。

下面是执行包装的实用函数和示例:

var alterResponse = function (opts) {
var callback = function (options, originalOptions, jqXHR) {
if (options.url.match(opts.urlMatch)) {
// Cache original callback.
var originalSuccess = originalOptions.success || options.success;
originalOptions.success = options.success = function () {
// Call wrapper that will modify the response object.
opts.successWrapper.call(null, options, originalOptions, jqXHR, originalSuccess);
};
}
};
if (opts.dataTypes) {
$.ajaxPrefilter(opts.dataTypes, callback)
}
else {
$.ajaxPrefilter(callback);
}
};

alterResponse({
urlMatch: /myurl/g, // Filter urls you what to tamper with.
successWrapper: function (options, originalOptions, jqXHR, originalFn) {
options.data.customVar = 'customValue';
originalFn(options, originalOptions, jqXHR);
}
});

我必须提到我将其用于测试目的,因此我不关心性能、内存和开销。

最佳答案

如果您想在数据到达事件处理程序之前修改从服务器返回的数据,请使用 dataFilter:

    jquery.ajaxSetup({
dataFilter: function (data, type) {
//modify your data here

return data;
}
});

关于javascript - 在执行任何绑定(bind)回调之前修改 ajax 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12823728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com