2009-06-03 6 views
0

J'ai créé un système de messagerie qui permet aux utilisateurs d'envoyer des messages les uns aux autres. Cela fonctionne bien mais quand ils répondent je ne veux pas qu'ils soient pris à une autre page, je veux une alerte pour dire "envoyé" ou "pas envoyé". Voici mon code qui ne fonctionne pas.soumettre formulaire en utilisant ajax et retour résultat

en php:

echo"<form id=\"form\" name=\"form\" method=\"post\" onsubmit=\"send(reply)\">"; 

javascript:

function send(reply) 
{ 
    var httpRequest; 
    make_request() 
    function stateck() 
     { 
     if(httpxml.readyState==4) 

     { 

     alert (httpxml.responseText); 

     } 

    httpxml.onreadystatechange=stateck; 
    reply_url="compose.php?reply=" + reply.value + "&msgid="<?php echo $msgid; ?> + "&to="<?php echo $to; ?> + "&subject="<?php echo $subject; ?>"; 
    httpxml.open("GET",reply_url,true); 
    httpxml.send(null); 
    } 
} 

J'utilise des variables php php car ces données doit être accessible à partir de la base de données.

Merci

Répondre

2

Vous devez indiquer au navigateur que vous avez géré l'événement vous-même en retour faux dans votre sur soumettre handler:

echo"<form id=\"form\" name=\"form\" method=\"post\" onsubmit=\"send(reply); return false;\">"; 

également votre fonction d'envoi ressemble il va générer une erreur, ce qui entraînera la navigateur à soumettre. Vous n'attribuez pas à httpxml n'importe où. Je suppose que vous voulez vraiment:

function send(reply) { 
    var httpxml; 
    httpxml = make_request(); 
    stateck = function() { 
     if(httpxml.readyState==4){ 
      alert (httpxml.status);// you will want to check the server response code too 
      alert (httpxml.responseText);  
     } 

    }; 

    httpxml.onreadystatechange=stateck; 
    reply_url="compose.php?reply=" + reply.value + "&msgid="<?php echo $msgid; ?> + "&to="<?php echo $to; ?> + "&subject="<?php echo $subject; ?>"; 
    httpxml.open("GET",reply_url,true); 
    httpxml.send(null); 
} 
+0

merci cela fonctionne si je tape manuellement le reply_url dans la barre d'adresse, mais ne fonctionne pas si je soumets – Elliott

+0

quelle est la valeur de la réponse? On dirait que ça pourrait être indéfini. – lambacck

+0

Je ne reçois pas de réponse devrait être "envoyé" – Elliott

2

Il vous a fallu une autre page parce que la forme a eu lieu submit. Si vous ne voulez pas la forme soumettre à lieu, utilisez

onsubmit="send(reply); return false;" 

Par ailleurs, vous pouvez utiliser guillemet simple: echo « ... » afin que vous n'avez pas besoin d'échapper à toutes les guillemets doubles dans la chaîne.

+0

Merci mais je dois soumettre la forme ... et retourner ce compose.php envoyé – Elliott

+0

vous pouvez utiliser AJAX pour obtenir le contenu de compose.php, mais vous ne voulez pas que le formulaire de soumission apparaisse, ce qui vous amène à une page différente (ou actualise la page en cours). –

0

Vous pourriez envisager d'utiliser une bibliothèque JavaScript. Pourquoi réinventer la roue quand elle existe déjà?

Exemples:

0

Habituellement, si vous voulez retourner quelque chose via Ajax vous voulez éviter une soumission de page. Cependant, si vous voulez que l'utilisateur ait l'impression de soumettre un formulaire, placez un bouton normal (c'est-à-dire PAS un bouton de soumission) sur la page qui servira de bouton Soumettre Ajax. Attachez votre fonction de mise à jour Ajax à onclick et ayez la page PHP vers laquelle vous dirigez la requête pour envoyer le résultat que vous voulez dans la réponse. Tout le reste (popping le texte de résultat dans les champs, etc) devrait juste être Ajax et JavaScript standard.

Questions connexes