Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要在所有ajax和jquery post函数之前调用一个javascript函数_Javascript_Php_Jquery_Ajax_Yii - Fatal编程技术网

需要在所有ajax和jquery post函数之前调用一个javascript函数

需要在所有ajax和jquery post函数之前调用一个javascript函数,javascript,php,jquery,ajax,yii,Javascript,Php,Jquery,Ajax,Yii,我使用ajax和$.post语法提供了各种函数,它们调用了服务器函数。但当会话过期且页面未刷新时,我的ajax代码将无法工作。在本文中,我想将页面重定向到登录控制器。 因为这是ajax调用,所以我的重定向代码不起作用 是否有任何代码或JavaScript/jQuery函数在任何其他jQueryAjax和post函数之前执行 我在服务器端使用PHP(Yii框架) 请让我知道。谢谢。您可以使用“beforeSend”ajax事件检查会话,如果会话已过期,您可以执行其他操作: $.ajax({

我使用ajax和$.post语法提供了各种函数,它们调用了服务器函数。但当会话过期且页面未刷新时,我的ajax代码将无法工作。在本文中,我想将页面重定向到登录控制器。 因为这是ajax调用,所以我的重定向代码不起作用

是否有任何代码或JavaScript/jQuery函数在任何其他jQueryAjax和post函数之前执行

我在服务器端使用PHP(Yii框架)

请让我知道。谢谢。

您可以使用“beforeSend”ajax事件检查会话,如果会话已过期,您可以执行其他操作:

$.ajax({
   beforeSend: function(){
     // Handle the beforeSend event
   },
   complete: function(){
     // Handle the complete event
   }
   // ......
 });
检查此项以了解更多信息:

jQuery提供了一组在请求生命周期中可以侦听的数据。在您的情况下,您可以订阅在
文档
上触发的
ajaxError
事件,以便在请求因未经授权而失败时作出反应:

$(document).on('ajaxError', function(el, xhr) {
    if (xhr.status == 401) {
        alert('Unauthorized');
    }
});

此代码可以解决您的问题

$(document).bind("ajaxSend", function(){
   //DO Someting..
});
注意beforeSend是本地事件,ajaxSend是全局事件

        /***
         * Global Ajax call which gets excuted before each $.ajax and $.post function
         * at server side chk session is set or destroy 
         ***/
        $(document).on('ajaxStart', function()
        {
            $.post( BASEURL+"/login/chkLogin",
            {},
            function(data)
            {
                if (data == 'login') {
                  window.location = BASE_URL+'/login'; //Load the login page
                }
                else
                {
                    //alert('all okay! go and execute!'); 
                    //No need to write anything in else part 
                    //or can say no need of else block 
                    //if all okay normal ajax action is processed
                }
            });     
      });

这就是我想要的。为我的功能完美地工作。谢谢你的回答和评论。我从你那里得到了大量的参考资料。

使用ajaxComplete事件

$( document ).ajaxComplete(function() { 
  window.location.href = "/login";
});

请提供更多代码。特别是提到的“重定向代码”,它不起作用。否则,我的第一个想法是:为什么不使用“keep alive”或“is alive”功能?谢谢。但是我想要一些全局性的东西,我不需要通过编辑每个函数来添加它们。如果没有,我们可以对jquery$.pos函数使用相同的