2016-06-16 43 views
-1

我有一個表格供用戶填寫。在服務器端,我使用mailgun在表單提交後發送電子郵件。從Node.js調用Materialise javascript

出現錯誤時,我想顯示敬酒對話框(使用Javascript中的Materialize.toast("Error", 2500);)。由於錯誤檢查發生在服務器端,所以我不知道如何調用該方法。

我碰巧在HTML中使用了一個<script>來阻止頁面在提交時刷新 - 但我無法弄清楚如何處理這個<script>中的錯誤。這裏是:

<script type="text/javascript"> 
$("#contact-form").submit(function(e) { 
    e.preventDefault(); // Prevents the page from refreshing 
    var $this = $(this); // `this` refers to the current form element 
    $.post(
     $this.attr("action"), // Gets the URL to sent the post to 
     $this.serialize(), // Serializes form data in standard format 

     function(data) { 
     }, 
     "json" // The format the response should be in 
    ); 
    Materialize.toast("Toasty McToastface!", 1000); 
    $('#contact-form').trigger('reset'); 
}); 
</script> 

我欣賞任何和所有的幫助。

回答

2

Upon an error, I want to display a toast dialog (Materialize.toast("Error", 2500); in Javascript). Since the error checking happens on the server side, I'm not sure how to call that method.

你必須從你的服務器端腳本返回錯誤,並從成功回調檢查data,看看是否有錯誤或沒有。

$.ajax() methodhas一個錯誤回調($.post()沒有),但是當出現超時,分析錯誤等

你可以不喜歡這樣的客戶端上,將只能被稱爲:

$.post(
    $this.attr("action"), 
    $this.serialize(), 
    function(data) { 
     if(data.error) { 
      Materialize.toast("Toasty McToastface!", 1000); 
     } 
    }, 
    "json" 
); 

當然,這個工作時,服務器將需要與具有error財產JSON對象,設置爲truefalse取決於羯羊或沒有電子郵件的發送響應。

如果您希望服務器能夠回調之外與客戶進行溝通,那麼你可以使用WebSockets(類似socket.io)

+0

所以我可以使用https://github.com/websockets/ws,並在服務器端發生錯誤,發送'「錯誤」'然後客戶端會與它交互? – Nxt3

+1

是的,那也行。我沒有使用過這個庫(ws),但過去我使用過socket.io,當出現問題時,您可以簡單地發出一個事件,然後在客戶端捕獲它,然後執行一些操作。 – Drown

+0

服務器端發生了什麼?自從我使用Express以來,我很困惑如何使用socket.io。這裏是'app.post()'我處理表單提交:https://codeshare.io/XfCCQ – Nxt3