永恒Ajax返回什么,没有PHP/Javascript错误,语法或其他

Eternal Ajax Returns Nothing, No PHP/Javascript errors, syntax or otherwise

本文关键字:错误 Javascript 语法 其他 PHP Ajax 返回 什么 没有 永恒      更新时间:2023-09-26

注意:我知道json/jquery似乎是目前做事情的首选方式。然而,我使用的只是普通的旧ajax,没有json/jquery。

我已经设置了我的网站,以便在索引页中没有php调用。相反,我加载通过ajax回调服务器来处理大多数链接点击的脚本。理论上,服务器返回响应文本,然后javascript on readystatechange函数(设置为ajax_response())将响应文本直接插入id="innercontent"的div容器中。

下面是我的主javascript文件的代码:

function ajax()
{
    try{ var request = new XMLHttpRequest()}
    catch(e1){
    try{ request = new ActiveXObject("Msxml2.XMLHTTP") }
    catch(e2){
        try{ request = new ActiveXObject("Microsoft.XMLHTTP") }
        catch(e3){ request = false }
        }
    } return request
}
function ajax_response()
{
    if(this.readyState == 4){
    if(this.status == 200){
        if(this.responseText != null){
        document.getElementById('innercontent').innerHTML = this.responseText
            } else alert("Ajax error: No data received")
        } else alert("Ajax error: " + this.statusText)
    }
}
function fetch_document(opcode)
{
    params = "opcode=" + opcode
    request = new ajax();
    request.open("POST", "/site-php/fetch_document.php", true)
    // request.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
    // request.setRequestHeader("Content-length", params.length)
    request.setRequestHeader("Connection", "close")
    request.onreadystatechange = ajax_response()
    request.send(params)
}
function fetch_comic(series, page_number)
{
    params = "series=" + series + "&page_number=" + page_number
    request = new ajax();
    request.open("POST", "/site-php/fetch_comic.php", true)
    // request.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
    // request.setRequestHeader("Content-length", params.length)
    request.setRequestHeader("Connection", "close")
    request.onreadystatechange = ajax_response()
    request.send(params)
}

在javascript中似乎没有任何语法错误,所以我认为问题可能是在服务器端。但是在/var/log/error_log中没有记录错误。

下面是我的php函数的代码:
<?php
require_once "kolodruid.php";
require_once "login.php";

if(isset($_POST['series']) && isset($_POST['page_number'])){
  $series = $_POST['series'];
  $page_number = $_POST['page_number'];
}
$mysql_db = mysql_connect($mysql_host, $mysql_user, $mysql_pass);
mysql_select_db("webcomics");
mysql_close($mysql_db);
$fd = $docroot . "test.html";
$msg = file_get_contents($fd);
echo $msg;
?>

注意,这个函数的实际功能是从数据库中获取webcomic信息。然而,在试图找出问题所在的过程中,我最终简化了函数,试图看看仅仅一个简单的echo语句是否可以工作。

:

<?php
require_once "kolodruid.php";
$opcode = $_POST['opcode'];
switch($opcode){
case "ABOUT":
  echo file_get_contents("about.html");
  break;
default:
  echo file_get_contents("whoops.html");
  break;
}
?>

当我查看firefox控制台网络选项卡时,点击链接"webcomic"会一路绿灯。我检查参数选项卡是否有任何数据,它确实有。然而,响应选项卡不包含任何内容。

我已经检查了所有的文件都是可访问的,并且在服务器可以访问的地方。我还拿出了javascript中的setrequesheader()函数,因为它似乎会导致致命的错误。然后我重新启用关闭连接setrequesheader(),看看我是否实际上仍然需要手动设置。它似乎没有产生致命错误,所以我没有把它注释出来。

我检查了php代码的语法错误,也检查了javascript代码的语法错误。结果都是干净的。我已经重新启动了我的服务器几次(它是localhost),并且也重新启动了我的mysql数据库服务器。

在这一点上,整个企业已经退化到只是做一些微小的编辑,绝望地希望有什么东西能提供线索,了解正在发生的事情。我已经将异步调用更改为同步调用,看看这是否可能是问题所在,但无济于事。(因此,我将它们重新更改为异步调用)。

我觉得这是一件非常愚蠢和/或明显的事情,但我已经在代码上倾注了几个小时,恐怕现在我已经只见树木不见森林了。请帮助!

谢谢你的阅读。我知道Javascript问题很常见,但我也花了几个小时阅读问答网站。D:

如果它很重要,我使用Apache 2.4.6版本谢谢你的帮助!

事实证明,这毕竟是一件非常明显的事情。我调用函数ajax_response()并将值赋给onreadystatechange。去掉ajax_response后面的括号可以产生期望的行为。