2017-04-04 44 views
0

我使用ajax這樣做,並且在後端以res.end響應,但到目前爲止,我只能POST一次。這裏是我的代碼:是否可以在不刷新頁面的情況下從同一個URL進行POST?

服務器

app.post("/awesome", passwordless.restricted({ failureRedirect: "/" }), (req, res, next) => { 
    // ...do a bunch of stuff 
    res.end(); 
}); 

客戶

$("[data-new-save]").on("click", function() { 
    $.ajax({ 
    url: "/awesome", 
    type: "POST", 
    data: awesomeDetails, 
    success: function() { 
     console.log("Cool beans"); 
     refreshContent(); // Re-renders content 

     // Feedback 
     $("nav").after("<div class=\"flash success\">Success!</div>"); 

     setTimeout(function() { 
     $(".flash").remove(); 
     }, 5000); 
    }, 
    error: function() { 
     console.log("Welp"); 

     // Feedback 
     $(".navigation").after("<div class=\"flash error\">Failure</div>"); 

     setTimeout(function() { 
     $(".flash").remove(); 
     }, 5000); 
    } 
    }); 
}); 
+0

你是說在初始POST後該按鈕不再起作用嗎?或者服務器不處理第二個請求? –

+0

嗯!該按鈕不響應。 –

回答

1

這聽起來像是對事件委託的情況下, 。我最好的猜測是你的refreshContent()功能是刪除原來的[data-new-save]元素和創建新的。這將導致綁定的click事件被移除,以及它是最初調用時存在的DOM節點的屬性。您可以通過將事件委派給未得到「刷新」的DOM節點來解決此問題,我假定<body>標記不會被重繪,只有一些子集,所以如果您的目標是<body>並尋找選擇器匹配"[data-new-save]"它應該正常運行:

$('body').on('click', "[data-new-save]", function() { 
    $.ajax({ 
    url: "/awesome", 
    type: "POST", 
    data: awesomeDetails, 
    success: function() { 
     console.log("Cool beans"); 
     refreshContent(); // Re-renders content 

     // Feedback 
     $("nav").after("<div class=\"flash success\">Success!</div>"); 

     setTimeout(function() { 
     $(".flash").remove(); 
     }, 5000); 
    }, 
    error: function() { 
     console.log("Welp"); 

     // Feedback 
     $(".navigation").after("<div class=\"flash error\">Failure</div>"); 

     setTimeout(function() { 
     $(".flash").remove(); 
     }, 5000); 
    } 
    }); 
}); 
+0

就是這樣,謝謝!就在你以爲你有'事件代表'想出來的時候。 –

0

這是我用類似的東西:

$(document).ready(function() { 
    $('#myform').on('submit', function(e) { 
     e.preventDefault(); 
     $.ajax({ 
      url : $(this).attr('action') ||  window.location.pathname, 
      type: "GET", 
      data: $(this).serialize(), 
      success: function (data) { 
       $("#form_output").html(data); 
      }, 
      error: function (jXHR, textStatus, errorThrown) { 
       alert(errorThrown); 
      } 
     }); 
    }); 
}); 
相關問題