Jquery:是什么HTML元素启动了ajax

Jquery: What HTML element initiated ajax

本文关键字:启动 ajax 元素 HTML 是什么 Jquery      更新时间:2023-09-26

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的直接调用方,我看不到其他方法。