我在点击时启动ajax的几个HTML元素。如何查看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
事件。
答案 0 :(得分:2)
$.ajaxComplete()
处理程序不是特定于对象的处理程序;您将任何AJAX请求完成时将其附加到要通知的文档。来自jQuery文档:
如果必须区分请求,请使用传递给处理程序的参数。每次执行ajaxComplete处理程序时,都会传递事件对象,XMLHttpRequest对象以及在创建请求时使用的设置对象。
因此,由于settings
是一个普通的对象,您可以使用一个属性对其进行扩展,然后将该属性传递给处理程序,如下面的requestingObjectId
所示。的 DEMO 强>
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);
答案 1 :(得分:1)
最佳和最简单的方法是在发送ajax调用时将元素存储在全局变量中。将其设置为event.target.activeElement。然后在你的ajaxComplete中你可以访问那个var来改变CSS等。
进一步考虑后,如果您使用我的解决方案,则必须一次将其限制为一个ajax请求。否则,如果初始ajax请求尚未完成,则新的ajax请求将覆盖变量。我会接受Palpatime的回答。
答案 2 :(得分:0)
jQuery AjaxRequests不是由控件本身发送的。它由代码发送,开发人员将其作为事件函数写入此Dom元素。 意味着你可以得到的最好的东西是$ .ajax()的被调用者通过覆盖和包装它。并且只有当被调用者没有以严格模式编写时才会被写入。
我更愿意阅读该框架的文档,该文档正在构建您的控件,或者是否由其他公司/人员构建,并与他们联系。
由于元素不是$ .ajax的直接调用者,我没有别的办法。