2014-01-16 83 views
1

我製作了一個名爲auth的過濾器,用於檢查用戶是否已登錄。如果沒有記錄它在主頁面上重定向,但如果是一個調用Ajax?我只是檢查是否。如果是我只是發送一個JSON狀態「無日誌」。現在我的客戶端收到了我的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)); 
     } 
    } 
}); 

如果返回所有沒有的loggedIn請求401呼叫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"); 
       } 
      }); 
     }); 
+0

爲什麼你說這不是一個好的解決方案,以供將來更新? – Fractaliste

+0

,因爲我有更多的時間在我的應用程序上調用ajax,我應該將檢查放在每個函數中?我希望有一些快速解決方案。 – Fabrizio

+0

我不知道Javascript中是否存在「過濾器」的概念。當然,如果你使用Ajax API,你可以重寫它的一個回調函數。你可以在這裏發佈你的基本Ajax調用嗎? – Fractaliste

回答

1

後探索的想法10天,我發現了一種覆蓋 AJAX的行爲舉止:

它只是需要你通過一個自定義更換每$.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", 
       ... 

然後這個自定義功能允許您之前或每次Ajax回調後,加一些動作:

例如檢查,以JSON的返回值決定我是否觸發成功回調,或者我會顯示警告:

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); 
} 
+0

這個想法並不壞,說得有道理。我不明白如何調用myCustomajax()函數來代替'$ .ajax({'該函數不會調用ajax。 – Fabrizio

+0

@Fabrizio自定義函數的最後一行是調用ajax,I認爲你沒有看到它。 – Fractaliste

1

的例子,你可以用$.ajaxSetup來處理應用程序中的所有的Ajax錯誤。

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

我已經看了這個方法,但是如果我能找到一個響應json的解決方案會更有幫助。感謝您的幫助 – Fabrizio

+0

您不能在'$ .ajaxSetup()'和'$ .ajax()'中使用成功。 '.ajax()'會覆蓋'$ .ajaxSetup()'。 – JackPoint

相關問題