PHP 必须使用 JS/JQ 触发表单数据(?)

PHP Formdata have to be triggered with JS/JQ (?)

是否可以不进入页面就运行一个phpfile/function? 我的意思是,如果您创建一个聊天应用程序,并且当您提交消息时整个页面都会重新加载,这真的很令人不安。

我试过 AJAX 但没有成功。 post chat_area 的文本到 PHP 文件是不可能的吗?

<form action="..." method="POST">
    <textarea id="chat_area" name="chat_text" cols="50" rows="1"></textarea>
    <input id="chat_submit" type="submit" name="submit" value="Posten">
</form>

<?php
    session_start();
    include_once( "database.php" );
    if( $_POST["chat_area"] ){
        $name = $_SESSION["firstname"]
        $time = "[" . date( "H:i", time() + 3600 ) . "]";
        $message = $_POST["chat_area"]
        mysql_query( "INSERT INTO chat( name, time, message ) VALUES ('$name', '$time', '$message' )" );
    }
?>

这是表单的默认行为。对于类似聊天的应用程序,您应该使用 ajax。不仅用于 posting 表单数据,还用于接收来自后端应用程序的消息。否则,您将不得不重新加载页面以检查您是否收到了一些新消息。

使用 jQuery 可以使用 event.preventDefault() 停止要触发的表单的默认操作,然后 post 数据到 PHP.

您应该将您的应用拆分为 2 个文件。主页和文件,所有数据都发送到(并从中接收)。

你的前端:

<?php
   session_start();
   // rest of the PHP, if any...
?>

<form method="POST">
  <textarea id="chat_area" name="chat_text" cols="50" rows="1"></textarea>
  <input id="chat_submit" type="submit" name="submit" value="Posten">
</form>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js" type="text/javascript"></script> 

<script>

  $(document).ready(function(){ 
     $('#chat_submit').on('click', function(e){
        e.preventDefault();

        $.ajax({
          type     : "POST",
          url      : 'your_php_file.php',
          dataType : 'text',
          data     :{
            message : $('#chat_area').val()
          },
          success  : function(data){
            if(data == 'success'){
              // E.g.: append the message to chat area after it is successfully stored in DB.
            }
          },
          complete : function(status){
            // call on complete
          },
          error    : function(response){
            // call when error
          }
        });
     });
  });

</script>

PHP (your_php_file.php):

<?php
  session_start();
  include_once("database.php");
  if( isset($_POST["message"]) ){
    $name = $_SESSION["firstname"];
    $time = "[" . date( "H:i", time() + 3600 ) . "]";
    // a little of safety:
    $unsafe_message = trim($_POST["message"]);
    $safe_message = mysql_real_escape_string($unsafe_message);
    mysql_query
      ( "INSERT INTO chat( name, time, message ) 
      VALUES
      ('$name', '$time', '$safe_message' )" ) or die('error');
      echo 'success';
  }else{
     echo 'error';
  }
?>