Jquery:是什么HTML元素启动了ajax
Jquery: What HTML element initiated ajax
I有几个HTML元素,它们在单击时启动ajax。如何检查在ajaxComplete
事件中单击了哪个元素?
我尝试了event.target
,但它返回了整个文档。
$( document ).ajaxComplete(function( event, xhr, settings ) {
if ( settings.url.indexOf("somelink/hello") > -1) {
console.log("return here element that initiated ajax")
}
});
注意:棘手的部分-我无法访问单击时发送的ajax请求。我无法配置发出请求的代码。我只能在ajax完成时进行检查。
我首先需要运行ajaxComplete
事件,然后检查哪个元素启动了ajax,因为我需要向该元素添加一些html。出于这个原因,我正在尝试签入ajaxComplete
事件。
$.ajaxComplete()
处理程序不是特定于对象的处理程序;您将它附加到文档中,以便在任何AJAX请求完成时得到通知。来自jQuery文档:
如果必须区分请求,请使用传递给处理程序的参数。每次执行ajaxComplete处理程序时,都会向它传递事件对象、XMLHttpRequest对象和创建请求时使用的设置对象。
因此,由于settings
是一个普通对象,您可以使用一个属性对其进行扩展,然后将该属性传递给处理程序,正如您在下面的requestingObjectId
中看到的那样演示
var onComplete = function(event, jqXHR, ajaxOptions) {
alert("Requested with " + ajaxOptions.requestingObjectId);
};
var makeRequest = function() {
var id = $(this).attr('id');
$.ajax({
url: '/path/to/server',
data: { foo: 1 },
requestingObjectId: id
});
};
$('button').click(makeRequest);
$(document).ajaxComplete(onComplete);
发送ajax调用时,最好且最简单的方法是将元素存储在全局变量中。将其设置为event.target.activeElement。然后在您的ajaxComplete中,您只需访问该var即可更改CSS等。
经过进一步考虑,如果您使用我的解决方案,您将不得不将其限制为一次一个ajax请求。否则,如果初始ajax请求尚未完成,则新的ajax请求将覆盖变量。我会接受Palpatime的回答。
jQuery AjaxRequest不是由控件本身发送的。它是由开发人员编写的代码作为事件函数发送到这个Dom元素上的。意味着你能得到的最好的东西是通过覆盖和包装$.ajax()的被调用者。并且只有当被调用者不是在严格模式下编写时。
我更愿意阅读该框架的文档,谁正在构建你的控件,或者如果它是由另一家公司/个人构建的,请联系他们。
由于该元素不是$.ajax的直接调用方,我看不到其他方法。
- 从控制器返回后Ajax启动事件激发
- Rails jquery ajax调用未启动
- 从Django中同一页面上的多个按钮启动AJAX请求
- 启动选项卡ajax在加载页面时加载内容
- jQuery$.ajax完成回调而未启动
- 使用PrimeFaces<p: ajax>,只在更改字段的键击时在inputText中启动Ajax
- 通过使用onblur启动Ajax查询到PHP MySQL DB
- TineMCE 不会启动 ajax 加载的文本区域
- 如果另一个仍在运行,请立即启动 ajax 调用
- 浏览器是立即启动AJAX调用,还是等待当前操作完成
- 非异步启动AJAX请求的替代方法
- 启动ajax服务器脚本并轮询完整性
- 如何在ajax运行时禁用click功能,相同的click启动ajax运行,在ajax完成后,重新启用click功能
- 如何在firefox中重写Ctrl + N以启动AJAX
- 立即启动AJAX请求,但在添加元素之前确保页面已经加载
- MVC DropDownList选择已更改,未启动Ajax
- 可以在表单提交后启动ajax调用吗
- 无法在IE9中的dom上启动ajax
- Internet Explorer启动AJAX调用延迟
- 用jquery重新启动ajax对象