【问题标题】:HTML Get URL parameterHTML 获取 URL 参数
【发布时间】:2013-07-26 13:30:26
【问题描述】:

我想在不重新加载页面的情况下更改 url,因为我使用 AJAX 函数重新加载 div。 问题是,当 AJAX 加载 div 时,它不读取 url 参数

我的代码(我已经加载了 jquery.js 等):

index.php

<a href="#page=1" onClick='refresh()'> Link </a>
<a href="#page=2" onClick='refresh()'> Link2 </a>


<script type="text/javascript">

 $.ajaxSetup ({
    cache: false
 });

 function refresh() {

    $("#test").load("mypage.php"); //Refresh
}

</script>



<div id="test">

</div>

mypage.php

 <?php 

 if (isset($_GET['page'])){

   $page = $_GET['page'];
 }
echo $page;

?>

【问题讨论】:

  • 可以在load函数中传递参数。 $("#test").load("mypage.php"); 变为 $("#test").load("mypage.php?page=mypage");
  • 我不明白你在做什么。你能解释清楚一点吗?
  • @putvande,这是一个例子,我的真实代码太大了,我只想使用 AJAX 加载我所有网站的页面
  • 也许您正在寻找的是 HTML5 历史 API。看看那个。

标签: php javascript jquery html ajax


【解决方案1】:

如果不重新加载页面,PHP 无法读取片段。这可以使用 JS 来完成。

在我用来读取参数值而不重新加载页面的脚本下方。我认为这不是最好的方法,因为有一些插件可以用来做同样的事情(甚至更多),但它确实有效。前段时间在网上找到的,可惜我不记得在哪里了:(

var urlParams;
(window.onpopstate = function () {
    var match,
        pl     = /\+/g,  // Regex for replacing addition symbol with a space
        search = /([^&=]+)=?([^&]*)/g,
        decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); },
        query  = window.location.hash.slice(1);
    urlParams = {};
    while (match = search.exec(query)) {
       urlParams[decode(match[1])] = decode(match[2]);
    }
})();

然后你会得到参数值:

urlParams['page']

如果你会经常使用哈希 URL,你应该看看这个插件:http://benalman.com/projects/jquery-bbq-plugin/

【讨论】:

    【解决方案2】:

    获取#哈希标签:

    使用 PHP(需要加载页面)

    parse_url()fragment 你需要的索引

    $url = parse_url($_SERVER['REQUEST_URI']);
    $url["fragment"]; //This variable contains the fragment
    

    使用 jQuery:(不需要页面加载)

    var hash = $(this).attr('href').split('#')[1];
    var hash = $(this).attr('href').match(/#(.*$)/)[1];
    

    演示(不带井号标签使用)

    index.php

    <a href="#" class="myLink" data-id="1"> Link </a> | <a href="#" class="myLink"  data-id="2"> Link2 </a>
    
    <script type="text/javascript">
     $(".myLink").click(function(e) { // when click myLink class
        e.preventDefault(); // Do nothing
        var pageId = $(this).attr('data-id'); // get page id from setted data-id tag
        $.ajax({
            type:'POST',
            url:'mypage.php', // post to file
            data: { id: pageId}, // post data id
            success:function(response){ 
                $("#test").html(response); // write into div on success function
            }
        });
    });
    </script>
    
    <div id="test"></div>
    

    mypage.php

    <?php 
    // get with $_POST['id']
    echo "Loaded Page ID: ".($_POST['id'] ? $_POST['id'] : "FAILED");
    ?>
    

    【讨论】:

    • 你能给我看一个使用的例子吗(用于jQuery),因为我不知道如何处理jQuery代码。
    • @user2372006 抱歉迟到了。我昨天很忙。添加了演示代码。我确实做到了没有哈希标签。
    【解决方案3】:

    您需要将page 参数传递给您请求的网址。

    试试这个:

    <a href="#page=1" onClick='refresh(1)'> Link </a>
    <a href="#page=2" onClick='refresh(2)'> Link2 </a>
    
    
    <script type="text/javascript">
    
     $.ajaxSetup ({
        cache: false
     });
    
     function refresh(pageNumber) {
    
        $("#test").load("mypage.php?page="+pageNumber); //Refresh
    }
    
    </script>
    

    【讨论】:

    • 加载有效,但问题是我无法通过这种方式将我当前在网站上的位置的链接发送给某人。这就是为什么我希望参数显示在 URL BAR 上。
    【解决方案4】:

    您可以通过 jQuery 中的load() 函数传递参数。

    有两种常见的方法:

    使用获取:

    JS:

    $('#test').load('mypage.php?page=mypage');
    

    PHP:

    <?php
    
    if (isset($_GET['page']))
    {
        $page = $_GET['page'];
    }
    echo $page;
    
    ?>
    

    或者使用数据作为帖子:

    JS:

    $('#test').load('mypage.php', { page: mypage });
    

    PHP:

    if (isset($_POST['page']))
    {
        $page = $_POST['page'];
    }
    echo $page;
    
    ?>
    

    【讨论】:

    • 我不想要POST,并且在负载中传递参数是可行的,但是问题是我无法通过这种方式将我在网站上的当前位置的链接发送给某人。这就是为什么我希望参数显示在 URL BAR 上。
    • 那你应该看看Bora的回答。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 2020-09-19
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    相关资源
    最近更新 更多