Formulaire de chat en PHP redirections avec Ajax

J’ai un simple chat avec plusieurs fichiers :

  • chat.php - le formulaire avec les champs nom d’utilisateur et message, et le bouton de soumission avec l’action : chat_send.php.
  • chat_send.php - insère dans la base de données le nom d’utilisateur et le message.
  • chat_receive.php - le fichier qui lit la base de données

Le problème est que je n’arrive pas à le faire fonctionner sans avoir à recharger le site. Je sais que je devrais utiliser Ajax, mais le code que j’ai mis en place ne fonctionne tout simplement pas. Il est censé lire les messages de la base de données et, sans rafraîchir la page, afficher les messages dans la boîte de dialogue. Où est le problème ?

AJAX

$(document).ready(function() {
  $('#send').submit(function(e) {
    e.preventDefault();     
    var url = $(this).attr('action');
    var data = $(this).serialize();  
    $.post(url, data)
      .done( function(response) {
        $('#response').html(response);
      })
      .fail( function() {
        alert("La requête AJAX a échoué !");
      });
  });
});

CHAT.PHP

<form action="chat_send.php" method="post" class="send" id="form1" >
  <p>
    <label for="name">Nom:</label>
    <input type="text" name="name" id="name">
  </p>
  <div style="width: 475px; height: 390px; text-align: left;" id="DIV_CHAT">
  </div>
    <p>
    <label for="emailAddress"></label>
    <textarea id="msg" rows="6" cols="70" name="msg" placeholder="Votre Message"></textarea></p>
    </p>
  <input class="submit" type="submit" id="button1" name="submit" value="Envoyer" onfocus="this.blur()"  />
</form>

CHAT_SEND.PHP

if(!isset($_POST['submit'])) {}else
{
  $name = mysqli_real_escape_string( $mysqli,$_POST['name']);
  $msg = mysqli_real_escape_string($mysqli, $_POST['msg']);
  $dt = date("Y-m-d H:i:s");
  $sql = "INSERT INTO messages (username, chatdate, msg) VALUES ('$name', '$dt', '$msg')";
  mysqli_query($mysqli, $sql);
}
$mysqli->close();

CHAT_RECEIVE.PHP

$sql = "SELECT *, date_format(chatdate,'%d-%m-%Y %r') as cdt from messages order by ID desc limit 200";
$result = $mysqli->query("SELECT * FROM (" . $sql . ") as ch order by id");
$msg="<table border='0' style='font-size: 10pt;'>";
while ($line = $result->fetch_array())
{
   $msg = $msg . "<tr><td>" . $line["cdt"] . "&nbsp;</td>" .
                 "<td>" . $line["username"] . ":&nbsp;</td>" .
                 "<td>" . $line["msg"] . "</td></tr>";
}
$msg=$msg . "</table>";
echo $msg;

J’ai essayé toutes les solutions Ajax mais sans succès.

Ce que je vois clairement, c’est que votre sélecteur jQuery pour le formulaire $('#send') ne correspond pas parce que l’ID du formulaire est form1, la classe est send, donc changez soit pour $('.send') soit pour $('#form1').