登录后绑定事件

时间:2014-01-16 16:35:01

标签: ajax laravel laravel-4

我制作了一个名为auth的过滤器,用于检查用户是否已登录。如果没有记录,它会在主页上重定向,但如果是调用ajax?我刚检查一下是不是。如果是我只是发送一个json状态" no-log"。现在我收到了我的json回复" no-log"在我的客户端上,我想打开一个模式来询问登录名和密码。我想要的解决方案很容易为每个ajax请求一个if语句来检查响应状态是否为" no-log"并显示模态的功能。虽然课程对未来的更新不利,我正在寻找一个好的解决方案,我可以绑定这个事件,如果我想在未来添加其他状态。有什么建议吗?

Route::filter('auth', function()
{
    if (Auth::guest()) {
        if ( !Request::ajax() ) {
            Session::put('loginRedirect', Request::url());
            return Redirect::to('/');
        } else {
            $status = "no-log";
            return json_encode(array('status' => $status));
        }
    }
});

调用ajax的一个例子

$(document).on("click", ".delete", function() { // delete POST shared
            var id_post = $(this);
            bootbox.confirm("Are you sure do want delete?", function(result) {
                if (result) {
                    $.ajax({
                        type: "POST",
                        url:  '/delete_post/' + USER,
                        data: { id_post: id_post.attr('id') },
                        beforeSend: function(request) {
                            return request.setRequestHeader("X-CSRF-Token", $("meta[name='token']").attr('content'));
                        },
                        success: function(response) {
                            if (response.status == "success") {
                                id_post.parents('div.shared_box').fadeOut();
                            }
                        },
                         error: function(){
                           alert('error ajax');
                        }

                    }); 

                } else {
                    console.log("close");
                }
            });
        });

2 个答案:

答案 0 :(得分:1)

如果您为所有未登录的请求返回401,则可以使用$.ajaxSetup来处理应用程序中的所有ajax错误。

$.ajaxSetup({
  error: function(jqXHR, exception) {
    if (jqXHR.status == 401) {
      window.location = 'your-login-page';
    }
  }
});

答案 1 :(得分:1)

经过10天的探索,我发现了一种覆盖 ajax comportment的方法:

只需要用自定义的$.ajax()替换每个$(document).on("click", ".delete", function() { // delete POST shared var id_post = $(this); bootbox.confirm("Are you sure do want delete?", function(result) { if (result) { myCustomAjax({ // In place of $.ajax({ type: "POST", ...

如果我重复使用您的代码:

function myCustomAjax(options) {    
    var temporaryVariable = options.success;

    options.success = function (data, textStatus, jqXHR) {
       // Here you can check jqXHR.responseText which contain your JSON reponse.
       // And do whatever you want

       // If everithing is OK you can also decide to continue with the previous succeed callback
       if (typeof temporaryVariable === 'function') 
           temporaryVariable(data, textStatus, jqXHR);
    };
    return $.ajax(options);
}

然后,这个自定义函数允许您在每个ajax回调之前或之后添加一些操作:

例如,检查JSON返回值以决定是否触发成功回调,或者显示警告:

{{1}}