2016-03-25 5 views
0

Ich entwickelte ein einfaches Formular, wo ein Benutzer einen Autornamen eingeben kann. Der Name wird mit Node JS in der Datenbank abgefragt, um zu überprüfen, ob Tweets von diesem Autor geschrieben wurden oder nicht. Wenn keine Daten vorhanden sind, möchte ich mit Ajax eine Antwort an den Client senden, indem eine Warnung angezeigt wird.Warnmeldung im Browser mit Ajax basierend auf Node JS Antwort

Dies ist der Client-Seite:

<html> 
<head> 
<script> 
     $(document).ready(function() { 
      $.ajax({ 
       error: function(error){ 
        if(error.responseText == 'showAlert'){ 
         alert("Please enter correct user name and password."); 
        } 
       } 
      }); 
     }); 
    </script> 
</head> 
<body> 
    <form action="/process_post" method="POST"> 
     <select name="SearchTypes"> 
      <option value="Author" selected>Author</option> 
      <option value="Mention">Mention</option> 
      <option value="Tag">Tag</option> 
     </select> 
     <input type="text" name="term"> 
     <br><br> 
     <input type="submit" value="Submit"> 
    </form> 

</body> 
</html> 

Dies ist der Teil des Knoten JS, die die Antwort enthält:

var query = connection.query(queryString, [term,term], function(err, rows) { 
     console.log(rows); 
     var tweet = JSON.parse(JSON.stringify(rows)); 
     if (tweet.length == 0){ 
      res.status(500).send('showAlert'); 
     }else{ 
      for(var i in tweet){ 
      res.write("Author: "); 
...... 

Wie Sie sehen, ich res.status(500).send('showAlert'); verwendet, um die Antwort auf die schicken Client-Seite, aber was wirklich passiert, ist, dass, wenn ich eine Eingabe, die keine Daten in der Datenbank (Tweet Länge ist gleich Null), gibt es nur showAlert in der HTML-Seite.

+0

Wo ist der Druckcode? Es ist nicht klar, was Sie wollen sagen –

+0

@Nasser Hat etwas geholfen, Ihr Problem zu lösen? – csum

+0

@csum noch nicht tatsächlich – Nasser

Antwort

0

Das liegt daran, dass das obige JavaScript das Steuerelement nur ausführt, wenn ein Fehler vorliegt, aber Ihre Nachricht als richtige Antwort gesendet wird. Sie sollten Ihren Client-Code zu überprüfen, im Fall des Erfolgs, wie dies ändern:

$(document).ready(function() { 
     $.ajax({ 
      error: function(error){ 
       if(error.responseText == 'showAlert'){ 
        alert("Please enter correct user name and password."); 
      success: function(result){ 
         if (result.responseText == 'showAlert'){ 
          alert("There was an error") 
         }else{ 
          //Do things... 
         } 
        } 
       } 
      } 
     }); 
    }); 
+0

Sendet das Senden eines Status von 500 einen Fehler in Aufrufen von '$ .ajax' nicht? – csum

0

Sie wollen den Ajax-Aufruf in einem Formular-Handler wickeln. Gerade jetzt, wenn Sie das Formular absenden, führt es eine vollständige synchrone Anfrage durch und kommt mit dem Text "showAlert" zurück.

$(document).ready(function() { 
    $('form').on('submit', function (e) { 
     // keep the form from submitting synchronously 
     e.preventDefault(); 

     var $form = $(e.currentTarget); 

     // submit via ajax 
     $.ajax({ 
     url: $form.attr('action'), 
     method: $form.attr('method'), 
     data: $form.serialize() 
     }) 
     .done(function (response) { 
     console.log('done: ', arguments); 
     }) 
     .fail(function(error){ 
     console.log('failed: ', arguments); 
     if(error.responseText == 'showAlert'){ 
      alert("Please enter correct user name and password."); 
     } 
     }) 
    }); 
}); 

diese Anrufe zu console.log entfernen, sobald Sie es haben arbeiten, wie Sie benötigen. Informationen zu diesem Anruf finden Sie unter $.ajax.

Sie werden wahrscheinlich auch Ihre form eine ID geben und dann darauf verweisen, z. $('#myForm'), damit Sie der Seite weitere Formulare hinzufügen können, ohne Probleme zu verursachen.