在使用PHP可读的哈希导航时,如何向url添加参数?

时间:2014-03-10 20:18:54

标签: php jquery html5

我在HTML5中编写了一个单页面应用程序。我使用JQuery和哈希导航在页面之间导航。这到目前为止工作正常。现在我写了一个非常简单的PHP脚本,从我的数据库中提取博客条目。当然,我希望用户能够链接这些文章并导航标签等。我将如何实现它?

我尝试了http://example.com/#blog?tag=news,但不知怎的,我的php脚本无法捕获该参数。

5 个答案:

答案 0 :(得分:2)

这是由#表示的片段,仅供浏览器使用,不会传递给服务器。正如你构建的那样,PHP不会收到$_GET['tag']而不是#blog

尝试?tag=news#blog但PHP仍然无法获得#blog

答案 1 :(得分:2)

就像http://www.example.com?tag=news#blog一样,在我看来它看起来更好,并且所谓的@AbraCadaver声明仅供浏览器使用。

<?php echo $_GET['tag']; ?> //would output news

答案 2 :(得分:1)

你可以使用这个var $_GET ['tag']

答案 3 :(得分:0)

你必须使用java scritp 例如:

var hash = location.hash;
 它会将哈希值返回给你  但是你需要使用
发送到服务器端 java脚本的发布或获取

答案 4 :(得分:0)

我已经解决了这个问题,想在这里分享一下。

这里的根本问题是使用JQuery加载所有内容。虽然我的初始URI是错误的,但http://example.com/?tag=news#blog也没有解决它。该变量从未发送到PHP的$ _GET数组,因为index.html不包含任何PHP,并且脚本通过JQuery / Ajax加载到div中。

所以这里的解决方案是修改我的JQuery函数:

function navigate(theHash)
{
    var parsed = theHash;
    var tag    = '';

    if ( theHash.indexOf("/") != -1 ){ /* Check if there is a trailing slash in the string */
        parsed = theHash.substr(0, theHash.indexOf("/"));
    }
    if ( theHash.indexOf(",") != -1 ){ /* Check for Parameters to send to PHP */
        parsed = theHash.substr(0, theHash.indexOf(","));
        tag = theHash.substr(theHash.indexOf(','), theHash.length);
    }


    if ( parsed.localeCompare("#!portfolio") == 0 ){
        $('#content').load('portfolio.html');
    }
    else if ( parsed.localeCompare("#!blog") == 0 ){
        if ( tag.localeCompare('') != 0 )
        {
            $("#content").load('blog.html?tag='+tag.substr(1, tag.length));
        }
        else{
            $("#content").load('blog.html');        
        }
    }
    else{
        $('#content').load('front.html');
    }
}

因此,if语句的博客部分稍微改变,加载带有附加参数的html页面(包含php代码),变量被正确传输到PHP,我可以通过$ _GET读取它。虽然这只是初稿,需要针对更多参数和更强大的行为进行改进,但它显示了我如何解决问题。