注意:我知道json / jquery目前似乎是首选的做事方式。尽管如此,我只使用普通的老ajax而没有json / jquery。
我已经设置了我的网站,以便索引页面中没有php调用。相反,我通过ajax调用加载处理大多数链接点击的脚本回到服务器。从理论上讲,服务器返回响应文本,然后在readystatechange函数上设置javascript(设置为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控制台网络选项卡时,单击链接&#34; webcomic&#34;一路产生绿灯。我检查参数选项卡是否有任何数据,确实如此。但是,响应标签不包含任何内容。
我已检查过所有文件是否可访问,以及服务器可以访问的位置。我还在javascript中取出了setrequestheader()函数,因为它似乎导致致命错误。然后我重新启用关闭连接setrequestheader()以查看是否可能我实际上仍然必须手动设置该连接。它似乎没有产生致命的错误,所以我没有评论它。
我检查了php代码的语法错误,并检查了javascript代码是否存在语法错误。两者都干净利落。我已经多次重启了我的服务器(它的本地主机),并且还在绝望中重新启动了我的mysql数据库服务器。
此时,整个企业已经转变为只是做了一些小编辑,绝望地希望SOMETHING能够提供有关正在发生的事情的线索。我已经将异步调用更改为同步调用以查看是否可能是问题,但无济于事。 (因此,我将它们重新转换回异步调用)。
我觉得这是一件非常愚蠢和/或显而易见的事情,但是我已经把代码倾倒了好几个小时了,恐怕我现在还不能看到树林了。请帮忙!
感谢您阅读本文。我知道Javascript问题很常见,但我也一直在阅读问答网站几个小时。 d:
如果重要,我使用Apache 2.4.6版 谢谢你的帮助!
答案 0 :(得分:0)
ajax_response()
并将值赋给onreadystatechange
。在ajax_response
生成所需行为后删除括号。