【发布时间】:2017-09-28 16:28:13
【问题描述】:
是否有可能让 jQuery .ajax 调用来执行全局 onSuccess 处理程序(我们暂时称之为 onSuccessGlobal)之前执行本地 onSuccess 处理程序?
基本上,流程应该是:
- 执行
.ajax调用(或.get、.post等) - 假设之前的调用成功,将调用全局
onSuccessGlobal处理程序,并从请求中传递结果数据。此数据在此方法中转换。 - 上一个处理程序返回转换后的数据后,由本地
onSuccess处理程序接收,该处理程序使用该数据向页面添加内容等。
我知道Ajax events 的存在,但是据我所知,ajaxSuccess 事件看起来不会:
a) 在本地 success 事件之前调用
b) 将修改后的数据发送到本地事件
为了实现类似的目的,我想我可以使用全局 ajaxSend 事件来中止当前的 ajax 请求,使用我需要的处理程序创建一个包装好的请求,然后发送新的包装好的请求。但我希望有人能提供一些见解,因为这听起来相当复杂。
谢谢!
【问题讨论】:
-
为什么不在
$.ajax的onSuccess回调中调用您的全局onSuccess?然后等待数据从您的全局数据返回,然后再在onSuccess中执行任何其他操作:$.ajax...onSuccess: function (data) { var transformed = globalOnSuccess(data); // do something with transformed } -
听起来像是 X/Y 问题?
-
@CarlMarkham:因为是代码库范围内的更改,所以让本地
onSuccess调用全局调用是不可能的(我相信 > 600 百个调用)。 -
@adeneo,是的,这是我想尝试的一个非常粗略的解决方案。根本问题是通过 ajax 请求发生的持久性 XSS 注入,我认为过滤通过 ajax 调用收到的任何输出将是一个值得尝试的一体化解决方案……我知道这绝对不是保护的方法与 XSS 攻击相比,但我们有点着急。
标签: javascript jquery ajax