2016-06-16 2 views
-1

У меня есть форму для заполнения пользователем. На стороне сервера я использую mailgun для отправки электронной почты после отправки формы.Call Materialize javascript от Node.js

При ошибке я хочу отобразить диалог тоста (Materialize.toast("Error", 2500); в Javascript). Поскольку проверка ошибок происходит на стороне сервера, я не уверен, как вызвать этот метод.

Я использую <script> внутри HTML, чтобы остановить обновление страницы после отправки, но я не мог понять, как обрабатывать ошибки в этом <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" 
); 

конечно, для того чтобы это работало, сервер должен отвечать объект JSON, который имеет свойство error, установленный в true или false в зависимости от Wether или не письмо было отправлено.

Если вы хотите, чтобы сервер, чтобы иметь возможность общаться с клиентом за пределами этого обратного вызова, то вы можете использовать WebSockets (что-то вроде Socket.io)

+0

Так что я мог бы использовать https://github.com/websockets/ws и при ошибке на стороне сервера, отправите '' error '', а затем клиент будет взаимодействовать с ним? – Nxt3

+1

Да, это тоже сработает. Я не использовал эту библиотеку (ws), но я использовал socket.io в прошлом, и вы можете просто выпустить событие, когда что-то пойдет не так, поймайте его на стороне клиента и сделайте что-нибудь тогда. – Drown

+0

Что происходит на стороне сервера? Я запутался в том, как использовать socket.io, поскольку я использую Express. Вот 'app.post()', где я обрабатываю отправку формы: https://codeshare.io/XfCCQ – Nxt3