Jquery将页面加载到由url中的#指定的div

时间:2015-05-27 17:40:16

标签: javascript jquery html url hashtag

我有一个基于jquery的网站,根本不需要刷新。但是当你刷新时,你会被抛到索引页面。我正在尝试在url中获得一个#系统(index#upload会将upload.php加载到#middle div)。 现在我以某种方式使用这种系统,但它一直在刷新我的div,我不确定这是否是最好的方法:

if (window.location.hash) {
    var hash = window.location.hash.substring(1);

    switch(hash) {
        case "files.php":

            $("#middle").load(hash);
        break;
        case "upload.php":
            $("#middle").load(hash);
        break;
        case "update.php":
            $("#middle").load(hash);
        break;
        case "changepassord.php":
            $("#middle").load(hash);
        break;
        case "options.php":
            $("#middle").load(hash);
        break;
    }
} else {

}

对此更好的想法? 顺便说一句,我也有这个链接栏,它应该与它一起工作(我alredy有一个代码,根据用户在此代码中点击的链接改变#)

$(document).ready(function(){
    $('#sidenav a').click(function(e){
        e.preventDefault();
        href = $(this).attr('href');
        window.location.hash = href;
        urlLoad = href;
        $("#middle").load($(this).attr('href'));

    });
    $('#topbar .profile').click(function(e){
        e.preventDefault();
        $("#middle").load($(this).attr('href'));
    });
});

2 个答案:

答案 0 :(得分:0)

我会这样做:

  1. 不要泄露整个文件名(包括.php扩展名), 因为这使潜在的攻击者更容易找到一个 起点相反,只使用名称部分。基本上,使用 “#files”作为您的标记,并加载页面 $("#middle").load(hash+".php");而不是开关/案例 可以使用数组来检查是否允许所请求的文件。
  2. 现在我们要如何实现这一点取决于你的目标 动机是要求允许的文件名: a)是吗? 因为还有其他脚本无法加载 进入文件? (您的清单详尽无遗) b)或者您可以这样做 确保所请求的文件存在且不会出现问题? (您的清单可能是动态的)

    for a)您可以使用数组("files", "upload", "update" ...); 定义允许的路径,并按indexOf()检查是否 或不允许该文件

    对于b)您可能会使用Ajax或检查建议的404错误 here

  3. 最后,将其包装在一个将在何时引用的函数中 你需要加载一个内容,所以你不必这样做 几个地方。
  4. 如果没有更多信息,我可以提供建议。我希望它有所帮助。

答案 1 :(得分:0)

这种方法有点模棱两可。此方法将从目录pages获取页面,并将文件类型.php附加到页面。如果文件不存在,则不会发生任何事情(如果有人试图注入未知文件)。文件加载后,它将替换#middle

的内容
function loadPage(page) {
    $.get('pages/' + page + '.php', function(data) {
        $('#middle').html(data);
    });
}