Ajax要求用户在收到和记录信息之前多次提交信息

时间:2010-09-06 19:54:05

标签: php html ajax

我在提交数据方面遇到了一些问题。我正在尝试使用PHP和Ajax创建一个简单的聊天框,但每当我尝试提交数据时,它只会在多次提交之后发布。我希望有人能告诉我代码的问题。

我是一个非常新手的编码员,这是我第一次使用这个网站所以如果它是一个明显的错误就好了^^“

主聊天框:

<head>
<link href="CSS.css" rel="stylesheet" type="text/css">
<script type="text/javascript">
function sendmessage()
{
if (window.XMLHttpRequest)
  {
  xmlhttp=new XMLHttpRequest();
  }
else
  {
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }

var name=encodeURIComponent(document.getElementById("name").value); var message=encodeURIComponent(document.getElementById("message").value); xmlhttp.open("POST","insert.php",true); xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xmlhttp.send("name="+name+"&message="+message); } </script> </head> <body> <center> <table width="600"> <tr> <td height="400"> <center> <iframe src ="output.php" width="580px" height="386px"> <p>Your browser does not support iframes.</p> </iframe> </center> </td> </tr> <tr> <td> <form method="POST"></br> &nbsp Name: &nbsp &nbsp &nbsp <input type="text" id="name" autocomplete="off" size="15"/><br/><br/> &nbsp Message: &nbsp <input type="text" id="message" autocomplete="off" size="70"/> &nbsp <input type="submit" value="Send" onclick="sendmessage()"/> </form> </td> </tr> </table> </center> </body>

PHP文件,它读取输入数据并将其写入日志文件:

<head>

3 个答案:

答案 0 :(得分:0)

每个人都应采取的一个好措施是安全性,从不明确地相信您的用户是好的并准确输入您期望的用户。总是,在使用之前,请务必检查POST和GET变量是否安全。应该探索诸如“strip_tags”,“mysql_real_escape”(如果你将它们放入数据库中)这样的函数。

答案 1 :(得分:0)

我抓住你的代码并在我的电脑上测试它。做了一些小的改变但是如果工作正常的话。我刚评论过

xmlhttp.execCommand('mceRemoveControl',false,'content');

然后一切都在FireFox上运行良好。

下面你可以看到我运行的代码:

HTML:

<html>
<head>
<!--link href="CSS.css" rel="stylesheet" type="text/css"-->
<script type="text/javascript">
function sendmessage()
{
if (window.XMLHttpRequest)
  {
  xmlhttp=new XMLHttpRequest();
  }
else
  {
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }


var name=encodeURIComponent(document.getElementById("name").value);
var message=encodeURIComponent(document.getElementById("message").value);
xmlhttp.open("POST","insert.php",true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
//xmlhttp.execCommand('mceRemoveControl',false,'content');
xmlhttp.send("name="+name+"&message="+message);
}
</script>
</head>
<body>
  <center>
    <table width="600">
      <tr>
        <td height="400">
          <center>
            <iframe src ="output.php" width="580px" height="386px">
              <p>Your browser does not support iframes.</p>
      </iframe>
          </center>
        </td>
      </tr>
      <tr>
        <td>
          <form method="POST"></br>
          &nbsp Name: &nbsp &nbsp &nbsp 
    <input type="text" id="name" autocomplete="off" size="15"/><br/><br/>
    &nbsp Message: &nbsp
    <input type="text" id="message" autocomplete="off"  size="70"/> &nbsp
    <input type="submit" value="Send" onclick="sendmessage()"/>
          </form>
        </td>
      </tr>
    </table>
  </center>
</body>
</html>

PHP:

<?php
try{
    $name='<table><tr><td width="100%">'.$_POST['name']." Says:</td>";
$message="<table><tr><td>".$_POST['message']."</td></tr></table></br>\n"; 
$time="<td>".date("d/m/y-G:i")."</td></tr></table>";
$file = "output.php";
$write = fopen($file, 'a') or die("Can't open file");
fwrite($write, $name);
fwrite($write, $time);
fwrite($write, $message);
fclose($write);
}catch(Exception $err){
    echo $err; 
}
?>

我刚试过FireFox 3.6 Safari 5和Chrome 6.我正在使用Mac,所以我没有在IE中尝试过。在这3个浏览器中,一切都在我开头告诉你的那条线之后工作得很好。你能证明你有关问题的更多细节吗?

答案 2 :(得分:0)

好的,我已经成功解决了这个问题。就像将ajax异步更改为false一样简单。希望这不应该创建任何其他发布。多谢你们!