Javascript xmlhttp请求不工作

Javascript xmlhttp请求不工作,javascript,xmlhttprequest,chat,Javascript,Xmlhttprequest,Chat,我正在尝试构建一个基本的聊天网站,它有四个文件:chat.html、scripts.html、load.php和send.php 这是: chat.html: load.php: <?php error_reporting(E_ALL); ini_set("display_errors", 1); $dbhost = "localhost"; $dbuser = "root"; $dbpass = "password"; $dbname = "website"; $conn = my

我正在尝试构建一个基本的聊天网站,它有四个文件:chat.html、scripts.html、load.php和send.php

这是:

chat.html:

load.php:

<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);

$dbhost = "localhost";
$dbuser = "root";
$dbpass = "password";
$dbname = "website";

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ("Error connecting to database");
mysql_select_db($dbname);

$query = "select * from chat";
$result = mysql_query($query);
$num = mysql_numrows($result);

$response = "";
$i = 0;
while($i < $num){
    $response .= "<p>" . mysql_result($result, $i, "user") . ": " . mysql_result($result, $i, "line") . "</p>";
    $i++;
}

mysql_free_result($result);
mysql_close($conn);

echo $response;
?>
在我浏览器的地址栏中,“herrturtrutr:HelloWorld”会在重新加载时显示在聊天窗口中

创建数据库的脚本如下所示:

create table chat (time INT(16), user VARCHAR(256), line TEXT);

所以我想它一定是scripts.js中的send()函数。在更改请求类型以获取后,我没有比这种方式更幸运的了,所以我发布了这个版本。我的代码出了什么问题?

直接调用XMLHttpRequest就像使用blink标记一样:它不会带来任何好处

使用图书馆

  • 你想大量使用Javascript吗?然后尝试更大的库,如JQuery或YUI
  • 如果您只需要最小值,可以使用mooTools或其他小型库
  • 谷歌通过其CDN(内容交付网络)提供最受欢迎的图书馆。看

直接调用XMLHttpRequest就像使用blink标记一样:它不会带来任何好处

使用图书馆

  • 你想大量使用Javascript吗?然后尝试更大的库,如JQuery或YUI
  • 如果您只需要最小值,可以使用mooTools或其他小型库
  • 谷歌通过其CDN(内容交付网络)提供最受欢迎的图书馆。看

事件是否被触发?开始在其中放置一些console.log,并诊断是否正在调用您的函数


编辑--等等,您的脚本名称是否与标记中的内容不匹配。

是否触发事件?开始在其中放置一些console.log,并诊断是否正在调用您的函数

编辑--等等,您的脚本名称与标记中的内容不匹配。

有几点:

  • 如果您的PHP使用
    $\u POST
    ,那么指向该脚本的AJAX
    open()
    也应该是
    POST
    。同样,如果您的PHP使用
    $\u GET
    ,您的
    open()
    应该使用
    GET
  • 使用浏览器控制台检查
    参数中实际设置的内容。这个字符串应该能够在GET请求中放在URL的末尾[编辑:我的意思是你应该能够在浏览器中将它放在地址的末尾],并且仍然可以工作。如果没有,请确保进入
    params
    的每个元素都是URL编码的
  • 我知道这不是问题的一部分,但现在,您的DB查询很容易受到SQL注入攻击。确保转义将要输入数据库的每个值。此外,如果您可以将
    时间
    存储为一个数字而不是字符串,那么您的查询速度将大大加快。当您只有几百条或几千条记录时,使用字符串的性能成本永远不会在开发过程中显示出来,但当您的数据库开始填满时,就会显示出来
  • 我不明白为什么这么多人反对滚动您自己的XHR请求。使用库可以在早期构建AJAX应用程序时揭开很多神秘的面纱,但是如果使用了错误的方法(POST而不是GET),那么它将不会对您有所帮助,而且调试实际上可能会更加困难,因为您需要挖掘大量代码来查看失败的地方。事实上,这一点都不难,自己动手可以帮助您理解请求的生命周期。下面是一个常见的跨浏览器代码段。这将使
    XMLHttpRequest
    即使在早期IE浏览器中也可用:

    if (typeof XMLHttpRequest === "undefined")
      XMLHttpRequest = function () {
        try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); }
          catch (e) {}
        try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); }
          catch (e) {}
        try { return new ActiveXObject("Msxml2.XMLHTTP"); }
          catch (e) {}
        //Microsoft.XMLHTTP points to Msxml2.XMLHTTP.3.0 and is redundant
        throw new Error("This browser does not support XMLHttpRequest.");
      };
    
    有几件事:

  • 如果您的PHP使用
    $\u POST
    ,那么指向该脚本的AJAX
    open()
    也应该是
    POST
    。同样,如果您的PHP使用
    $\u GET
    ,您的
    open()
    应该使用
    GET
  • 使用浏览器控制台检查
    参数中实际设置的内容。这个字符串应该能够在GET请求中放在URL的末尾[编辑:我的意思是你应该能够在浏览器中将它放在地址的末尾],并且仍然可以工作。如果没有,请确保进入
    params
    的每个元素都是URL编码的
  • 我知道这不是问题的一部分,但现在,您的DB查询很容易受到SQL注入攻击。确保转义将要输入数据库的每个值。此外,如果您可以将
    时间
    存储为一个数字而不是字符串,那么您的查询速度将大大加快。当您只有几百条或几千条记录时,使用字符串的性能成本永远不会在开发过程中显示出来,但当您的数据库开始填满时,就会显示出来
  • 我不明白为什么这么多人反对滚动您自己的XHR请求。使用库可以在早期构建AJAX应用程序时揭开很多神秘的面纱,但是如果使用了错误的方法(POST而不是GET),那么它将不会对您有所帮助,而且调试实际上可能会更加困难,因为您需要挖掘大量代码来查看失败的地方。事实上,这一点都不难,自己动手可以帮助您理解请求的生命周期。下面是一个常见的跨浏览器代码段。这将使
    XMLHttpRequest
    即使在早期IE浏览器中也可用:

    if (typeof XMLHttpRequest === "undefined")
      XMLHttpRequest = function () {
        try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); }
          catch (e) {}
        try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); }
          catch (e) {}
        try { return new ActiveXObject("Msxml2.XMLHTTP"); }
          catch (e) {}
        //Microsoft.XMLHTTP points to Msxml2.XMLHTTP.3.0 and is redundant
        throw new Error("This browser does not support XMLHttpRequest.");
      };
    

    我可能是老生常谈,但使用任何常见的AJAX库在js中发出请求都会为您节省很多时间。没有多少人可以调试XMLHttpRequest。你能推荐一个好的吗?我确实使用jquery,所以不能告诉别人。下面是基本的ajax文档。如果你稍微滚动一下,你会发现一些例子。我可能很平庸,但使用任何常见的AJAX库在js中发出请求都会为你节省很多时间。没有多少人可以调试XMLHttpRequest。你能推荐一个好的吗?我确实使用jquery,所以不能告诉别人。下面是基本的ajax文档。如果你滚动一点,你会发现一些例子。你认为脚本名与标记中的不匹配是什么?我仔细检查了一下,两个标记中的脚本名称都是“send()”,而scripts.js中的脚本名称是“send()”。我
    localhost/send.php?time=12345&user=Herrturtur&line=HelloWorld
    
    create table chat (time INT(16), user VARCHAR(256), line TEXT);
    
    if (typeof XMLHttpRequest === "undefined")
      XMLHttpRequest = function () {
        try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); }
          catch (e) {}
        try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); }
          catch (e) {}
        try { return new ActiveXObject("Msxml2.XMLHTTP"); }
          catch (e) {}
        //Microsoft.XMLHTTP points to Msxml2.XMLHTTP.3.0 and is redundant
        throw new Error("This browser does not support XMLHttpRequest.");
      };