2017-08-17 39 views
1

我有一個設置頁面,您可以插入和刪除一些過濾器。對於刪除請求我用這個:Node.Js承諾重定向不起作用

$('#delete-filter').click(function (e) { 
     var filtername = $('#filter-list').val(); 
     var filterCount = $('#filter-list option').length; 
      var retVal = confirm("Are you sure to delete this filter?"); 
      if(retVal == true){ 
       $.ajax({ 
        url: "/settings?filtername=" + filtername, 
        method: 'DELETE', 
        dataType: "json", 
        success: function (result) { 

        } 
       }); 

      } 
      else{ 
       return false; 
      } 

    }); 

這裏是我的這個頁面路徑:

router.delete('/settings', ensureAuthenticated, function (req, res, next) { 
    var promise = user.deleteFilter(req.session.user_id, req.query.filtername); 
    var promise2 = promise.then(function (data) { 
     req.session.selected_filter = data.selected; 
     res.redirect('/settings'); 
    }, function (error) { 
     console.log(error); 
    }) 
}) 

基本上我想重定向到頁面設置,因此用新的數據重新加載頁面。但是在承諾鏈中我不能使用任何響應函數。我使用重定向錯誤嗎?或者我無法在承諾鏈中發送回覆?

回答

3

你誤認了這個問題。

當您發出HTTP重定向時,您會說:「您正在尋找的東西?取而代之。」

這不同於「瀏覽器應該將此URL作爲新頁面顯示」。

遵循HTTP重定向,將設置頁面發送到瀏覽器,然後瀏覽器在您的成功功能中使用result。 (你完全忽略它,因爲你沒有在該函數中放入任何東西)。

如果您希望瀏覽器加載一個新的頁面,那麼你就需要提供URL作爲數據(而不是重定向),然後將該值賦給location.href

設置頁面可能不應該動態確定,因此您可能只需將URL強制編碼到成功函數中即可。

硬編碼會更有意義,因爲你不應該在響應發送重定向到DELETE request

如果成功應用DELETE方法,原始服務器 應該發送202(已接受)狀態代碼,如果動作可能 成功但尚未制定,則204(無內容)狀態 代碼(如果該動作已經制定並且沒有進一步的信息是要提供的 或200(OK)狀態代碼如果已採取行動已制定 並且響應消息包含代表 de刻寫狀態。

+0

我想知道,你在哪裏得到了OP尋找的提示「瀏覽器應該將此URL作爲新頁面顯示」?我的意思是,他使用ajax =/ – Salketer

+0

@Salketer - Quote:「本質上我想重定向到頁面設置,所以**頁面重新加載**新數據」 – Quentin

+0

我已經嘗試'res.send({ href:「/ settings」});'而不是'res.redirect('/ settings')'。正如你所說的,我在成功方法中使用了location.href,但頁面沒有重新加載。它保持加載,沒有任何反應。 –