如何在使用MVC部分视图的任何成功的Ajax请求之后调用jQuery函数

Bra*_*don 8 ajax jquery

我有jQuery代码,在渲染视图时运行正常.但是,我希望在Ajax请求成功后运行相同的代码.jQuery最初是在文档准备好时执行的,但是我将它移动到它自己的函数中,因此可以调用它.该函数为一些标签元素添加了一些简单的类.这是我到目前为止:

$(function () {
    afterLoad();
});

$.ajaxSetup({
    success: function () {
        afterLoad();
    }
});

function afterLoad() {
    // code to execute
}
Run Code Online (Sandbox Code Playgroud)

在发出简单的Ajax请求后,这不能正确执行:

$('#ajaxTest').load('<MVC Route>')
Run Code Online (Sandbox Code Playgroud)

部分视图返回正常,但afterLoad()尝试在局部视图之前运行在DOM中.如果我再次执行相同的调用,afterLoad()则运行(在前一个局部视图上),但是它会被新的局部视图覆盖.

有什么想法吗?另一种方法是没问题的,我正在寻找一个是在部署视图的Ajax请求之后运行站点级.js文件.母版页加载了site.js文件,我想在不重新加载文件的情况下执行它的代码(因为它已经被浏览器加载).另外,我不想强​​迫开发人员对他们的Ajax调用做任何不同的事情,所以它需要使用简单的.load()等等.

Ami*_*haq 16

这就是我用来做你想做的事情:

如果需要访问XHR对象,也可以访问它.

//Global Ajax Complete
$("body").bind("ajaxSend", function(e, xhr, settings){
    //Sent
}).bind("ajaxComplete", function(e, xhr, settings){
    //Complete
}).bind("ajaxError", function(e, xhr, settings, thrownError){
    //Error
});
Run Code Online (Sandbox Code Playgroud)

编辑:这是我的结构,一直在为我工作.

site.js

function afterLoad() {
    // code to execute
}
$(document).ready(function(){
    $("body").bind("ajaxComplete", function(e, xhr, settings){
           afterLoad();
    });
});
Run Code Online (Sandbox Code Playgroud)

创造了一个快速的小提琴.你是这个意思吗?

编辑二:

您可能希望在DOM上有一个监听器,用于<form>显示然后运行您的afterLoad()函数的任何元素.这可能是一次性能损失,所以我会小心翼翼地使用它.

我使用livequery来做到这一点

$('form').livequery(function(){
    afterLoad();
});
Run Code Online (Sandbox Code Playgroud)