jQuery Ajax .ajaxSuccess()事件未触发

3
我有一个原生JavaScript对象,我想将.ajaxSuccess回调函数分配给它。这样做的目的是因为我希望在ajax调用成功后更新我的数据模型,但我不想将我的数据模型全局化到整个JavaScript文件中。是的,我检查过我的jQuery是否在我的脚本文件之前被包含。以下是代码:
$("#formButtonAddLink").click(function() {
    $.ajax({
        type: "POST",
        url: "ajax/addlink",
        data: {content: $("#formInputLinkContent").val(), subject: $("#formInputLinkSubject").val()},
        dataType: "json",
        error: function() {
            alert("An ajax error occured adding link")
        }
    });
    return false; //prevents html form submit
})

$(document).ready(function(){
    var links = new Links(20,0);
    $(links).ajaxSuccess(function() {
        console.log("Hey.")    //This does not work.
    });
    $(document).ajaxSuccess(function() {
        console.log("Document hey.")   //This shows up.
    });
});

那完全是无效的。你想要的结果是什么?如果我没记错,ajaxSuccess 被调用的 jQuery 对象没有实际影响,那为什么不使用 document 或其他任何东西呢? - James Montagne
@JamesMontagne 哪些部分是无效的?期望的结果是我的链接对象接收 .ajaxSuccess 回调。实际上,它将执行比 console.log 更有用的操作。我希望我的链接对象在 ajax 调用后更新自身,这就是为什么我不能使用任何旧的 DOM 对象。 - nidoran
你在调用ajaxSuccess的对象上并没有“接收”任何东西。如果你想在回调函数中使用links变量,可以这样做。 - James Montagne
那么说“jQuery(object),object:要包装成jQuery对象的普通对象”这个API在这种情况下不起作用吗? - nidoran
更新了我的评论。请查看链接。但是您对ajaxSuccess的整体理解似乎是不正确的。 - James Montagne
1个回答

1

ajaxSuccess () 的基本思想是:

每当 Ajax 请求成功完成时,jQuery 就会触发 ajaxSuccess 事件。任何已经通过 .ajaxSuccess() 方法注册的处理程序都将在此时执行。

根据文档,据我所知,你只能将 ajaxSuccess() 事件处理程序附加到一个元素上,而不是 JavaScript 对象。这就是为什么在将事件处理程序附加到 document 上时它能够正常工作的原因。

我们可以将我们的事件处理程序附加到任何元素上。

在这种情况下,如果您有类似于以下内容的内容:

<div class="links"></div>

你可以这样做:

$(document).ready(function(){
    $(".links").ajaxSuccess(function() {
        console.log("Hey.")
        // use links in here:
        var links = new Links(20,0);
    });
});

好的,这很有道理。我希望能够在对象本身上绑定回调,但我想那是不可能的。所以我会将其绑定到相关元素,然后从那里处理事情。谢谢! - nidoran
1
从jQuery 1.9开始,所有jQuery全局Ajax事件的处理程序(包括使用.ajaxSuccess()方法添加的处理程序)都必须附加到document。 - callback

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接