ajaxStart没有在onclick上工作

时间:2017-03-18 21:55:46

标签: javascript jquery ajax

我想在我的网站中添加加载程序,我正在使用ajaxStart和ajxStop请求来隐藏和显示div。但问题是ajaxStart和ajaxStop请求没有被按钮onclick触发。 以下是我的代码:

<style>
  //css for loader
  //another class with overflow=hidden
</style>

现在,我想做的是:

$("#msg1").click(function(event){            //msg1 is the id of the button
    $body = $("body");
    $.ajaxSetup({'global':true});
    $(document).ajaxStart(function(){
        $body.addClass("loading");
    });
   }); 

但这不起作用。下面的代码有效:

$("#msg1").click(function(event){            //msg1 is the id of the button
    alert("Hello");
});

那么,我错过了什么意思?

1 个答案:

答案 0 :(得分:1)

ajaxStart将为ajax请求开始时注册一个处理程序,它实际上不会触发ajax调用。根据你所写的内容,&#34; loading&#34;如果你现在使用任何jQuery方法进行ajax调用,class将被添加到body标签中。

e.g。

$( ".result" ).load( "ajax/test.html" );

更新

将您的代码更改为类似的内容以使其正常工作

// Move these out of the click handler as they don't have to run every time
// the button is clicked.
var $body = $("body");

$.ajaxSetup({'global':true});

$(document).ajaxStart(function(){
    $body.addClass("loading");
});

$("#msg1").click(function(event){
    // Here is where you actually make the ajax call, so the "loading" class
    // will now be added to the body tag.
    $.ajax( "example.php" )
      .done(function(data) {
        // Do something with the data you've just retrieved.
        // You probably now want to remove the "loading" class too.
    })
});