Jquery:什么HTML元素启动了ajax

时间:2015-02-06 14:28:13

标签: javascript jquery html ajax

我在点击时启动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事件。

3 个答案:

答案 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的直接调用者,我没有别的办法。