【发布时间】:2011-07-13 00:22:16
【问题描述】:
我想在单击 html 按钮后加载 error.html 文件。因此,我有一个带有按钮和相应点击事件的网站。
$.ajax(
{
type: "POST",
url: "../../../server/check.php",
data: "login=granted&user=user&site=overview",
success: function(msg)
{
alert(msg);
}
});
在此单击事件中,我使用 $.ajax 调用 check.php 脚本,该脚本应通过 file_get_contents() 加载我的 html 文件。这是复杂的php代码:
<?php
$homepage = file_get_contents('../client/manage/login/error.html');
echo $homepage;
?>
现在的问题是 error.html 没有加载,而是将 html 代码返回给 $.ajax 调用。如果我直接在浏览器中输入 check.php 的 url,它就可以工作。
我知道有几种方法可以加载 html 文件,但我需要这样做。实际上,我还想通过这个 php 脚本加载其他几个网站。
有人可以给我一个提示吗?
非常感谢。
编辑:好的,我试着更具体一点。我已经成功实现了一个登录系统。该系统由两个 html 输入字段组成,一个用于用户名,一个用于密码。两者都根据数据库进行检查。如果两者都正确,则允许用户访问一些受保护的 html 站点。
现在我想避免用户可以直接将受保护站点的 url 放入浏览器的地址栏中;因此,我创建了一个 .htaccess 文件,并在 mod_rewrite 的帮助下强制将受保护的 html 站点的每个请求重定向到 check.php。 这是.htaccess:
RewriteEngine On
RewriteBase /simulation/client/manage
RewriteRule ^([a-zA-Z]+)\.html$ ../../server/check.php?page=$1 [L]
你看,所有受保护的 html 文件都在 /simulation/client/manage 中,这是所有受保护站点所在的路径。如果用户想重定向到其中一个,他会被发送到 check.php他或她想要访问的相应站点。 这是php代码:
if(strcmp($_POST["login"],"granted") == 0)
{
$_SESSION['user'] = $_POST["user"];
}
else if(strcmp($_POST["logout"],"logout") == 0)
{
session_unset();
$_SESSION=array();
}
if(!isset($_SESSION['user']))
{
$homepage = file_get_contents('../client/manage/login/error.html');
echo $homepage;
}
else
{
$homepage = file_get_contents('../client/manage/'.$page.'.html');
echo $homepage;
}
到目前为止,一切都很好。在这个 check.php 中,我检查是否设置了会话变量。仅当用户成功登录时才设置它们。如果没有,则加载 error.html。 这一切都很好,如果用户在浏览器中键入受保护页面之一的 url 并且未登录,则 file_get_contents 会加载 error.html 页面,否则会加载受保护页面之一。
唯一的问题是,如果我通过 $.ajax 调用脚本,则不会加载任何内容。
【问题讨论】:
-
您说“将 html 代码返回给 $.ajax 调用”究竟是什么 HTML 代码?
-
网站的完整代码,包括doctype和网站中声明的所有其他内容。
-
alert(msg) 显示以下内容:ttp://www.w3.org/TR/html4/strict.dtd" rel="nofollow" target="_blank">w3.org/TR/html4/strict.dtd"> 头> 错误
-
你能让它打印出整个错误吗?尝试从 ajax 调用运行 file_get_contents() 时可能会出现问题。例如:当您从客户端文件夹中的 ajax 调用页面运行它时与直接在浏览器中访问服务器文件夹 php 脚本时不同,可能是您的 URL 路径存在问题。
-
我尝试使用完整路径: url: "localhost/simulation/server/check.php" 但这会导致相同的结果