Ajax требует от пользователя предоставить информацию несколько раз, прежде чем она будет получена и зарегистрирована - PullRequest
1 голос
/ 06 сентября 2010

У меня небольшая проблема с получением данных для отправки. Я пытаюсь создать простое окно чата с использованием PHP и Ajax, но всякий раз, когда я пытаюсь отправить данные, они публикуются только после того, как они были отправлены несколько раз. Я надеюсь, что кто-то может сказать мне, проблема со мной код.

Я очень начинающий программист, и я впервые использую этот сайт, так что будьте любезны, если это явная ошибка ^^ "

Основной чат:

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

<p>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);
}
<code></script></code>
<code></head></code>
<code><body></code>
  <code><center></code>
    <code><table width="600"></code>
      <code><tr></code>
        <code><td height="400"></code>
          <code><center></code>
            <code><iframe src ="output.php" width="580px" height="386px"></code>
              <code><p>Your browser does not support iframes.</p></code>
      <code></iframe></code>
          <code></center></code>
        <code></td></code>
      <code></tr></code>
      <code><tr></code>
        <code><td></code>
          <code><form method="POST"></br></code>
          <code>&nbsp Name: &nbsp &nbsp &nbsp</code> 
    <code><input type="text" id="name" autocomplete="off" size="15"/><br/><br/></code>
    <code>&nbsp Message: &nbsp</code>
    <code><input type="text" id="message" autocomplete="off"  size="70"/> &nbsp</code>
    <code><input type="submit" value="Send" onclick="sendmessage()"/></code>
          <code></form></code>
        <code></td></code>
      <code></tr></code>
    <code></table></code>
  <code></center></code>
<code></body>

PHP-файл, который читает входные данные и записывает их в файл журнала:

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

Ответы [ 3 ]

0 голосов
/ 07 сентября 2010

Я просто взял ваш код и проверил его на своем компьютере.Сделал некоторые небольшие изменения, но все, если работает нормально.Я только что прокомментировал

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.В этих трех браузерах все работало нормально после строки, о которой я говорил в начале.Не могли бы вы доказать более подробно о вашей проблеме?

0 голосов
/ 07 сентября 2010

Хорошо, мне удалось решить проблему.Это было так же просто, как изменить асинхронность ajax на false.Надеемся, что это не должно создавать никаких других изданных.Спасибо, парни!

0 голосов
/ 07 сентября 2010

Хорошая мера, которую должен принять каждый, - это безопасность, никогда не доверяйте своим пользователям в явной форме и вводите именно то, что вы ожидаете от них.Всегда проверяйте, безопасны ли переменные POST и GET перед их использованием.Такие функции, как "strip_tags", "mysql_real_escape" (если вы перейдете и поместите их в базу данных), должны быть изучены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...