AJAX聊天系统无法正常工作

时间:2014-01-13 10:05:05

标签: javascript php html ajax mysqli

我似乎无法解决这个问题。过了几天,重写一次后仍然没有进展,比我能指望的还多。

这是Javascript(与html相同的页面)

摘要:用户在输入框中键入文本。这将被发送处理,然后被发回并显示在html页面上的ID为DisplayText的框中。

<script type="text/javascript">
    function SendText() {
        if (document.getElementById("Text").innerHTML == "") {
            return;
        } else
        {
            var xmlhttp = new XMLHttpRequest();
            xmlhttp.onreadystatechange = function() {
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                    document.getElementById("DisplayText").innerHTML = xmlhttp.responseText;
                }
            }
            Text = document.getElementById("Text").value;
            xmlhttp.open("GET", "php/Test.php?Chat=" + Text, true);
            xmlhttp.send();
        }
    }
</script>

这是HTML(与脚本相同的页面)

<div>
    <p>
        <span id="DisplayText">
            TEXT GOES HERE
        </span>
    </p>
</div>
<form action="" onsubmit="SendText();">
    <input type="" name="" id="Text" />
    <input type="submit" value="Send" name="Send" />
</form>

PHP代码在这里

<?php
session_start();
include ("Connect.php");
$Connection = mysqli_connect("localhost", "root", "", "chatsystem");
$Create = "CREATE TABLE " . $_SESSION["Username"] . "Chat(Username VARCHAR(255), Chat VARCHAR(255))";
////////////////////////////////////////////////////////////////////////////////
$DatabaseExist = $Connection->query("SELECT 1 FROM " . $_SESSION["Username"] . "Chat");
if ($DatabaseExist !== false) {
    echo "Database exists";
    doSomething();
} else {
    echo "Database does not exist";
    mysqli_query($Connection, $Create);
    doSomething();
}
////////////////////////////////////////////////////////////////////////////////
function doSomething() {
    // Get the sent chat
    $Input = $_REQUEST["Chat"];
    // Insert into the database the new chat sent
    mysqli_query($Connection, "INSERT INTO " . $_SESSION["Username"] . "chat (`Username`, `Chat`) VALUES ('$_SESSION[Username], '$Input')");
    // Select everything from the database
    $Result = $Connection->query("SELECT * FROM " . $_SESSION["Username"] . "Chat");
    // Display everything from the database in an orderly fashion
    // --
    // For the length of the database
    // Append to a variable the next table row
    // --
    while ($Row = $Result->fetch_array()) {
        // Make Variable accessable
        global $Input;
        // Append username to the return value
        $Input = $Input . $Row["Username"] . " : ";
        // Append chat to the return value
        $Input = $Input . $Row["Chat"] . "<br />";
    }
}
// Will return the value
echo $Input;
?>

我与数据库的连接很好。我在其他有效的网页上使用它。 所以我们假设这不是问题。 :P

任何知道或可能想到错误的人的任何帮助或见解,我将非常感激。 我是AJAX的新手。

3 个答案:

答案 0 :(得分:1)

您使用

进行了错误的测试
if (document.getElementById("Text").innerHTML == "")

它应该与您在AJAX中发送文本的方式相同

if (document.getElementById("Text").value == "")

请检查其value属性,而不是innerHTML,因为input元素没有html内容..


请注意,因为您的代码对SQL injection attacks是开放的。

答案 1 :(得分:0)

答案 2 :(得分:0)

第一名使用输入的value属性代替innerHTML

例如。使用

if (document.getElementById("Text").value == "")

而不是

if (document.getElementById("Text").innerHTML == "")

第二名:在表单的return false;事件中使用onsubmit;当您使用ajax时,阻止当前页面刷新。否则页面将刷新,它不会显示php页面的输出,

例如。使用

onsubmit="SendText(); return false;"

而不仅仅是

onsubmit="SendText();"