【问题标题】:How do I maintain GET Url arguments across multiple pages with jQuery and PHP?如何使用 jQuery 和 PHP 跨多个页面维护 GET Url 参数?
【发布时间】:2011-07-16 21:25:18
【问题描述】:

我有一个网站,它使用 GET 表单允许用户指定邮政编码,然后根据该条目提供按距离排序的结果。如果没有邮政编码,则仅显示所有结果。

我的代码运行良好。问题是当我从第 1 页更改为第 2 页时,我丢失了查询字符串。

由于其他技术原因,我不能使用 POST 方法。具体来说,我需要能够以某种方式保存此查询状态并检查所请求页面的 url,如果该查询字符串为空,则重新附加该查询字符串。

关于如何做到这一点的任何想法?该网站使用了大量的 jQuery,但我不确定 jQuery 是否有办法在多个页面中记住这个字符串。该站点也使用 PHP。我不介意将结果存储在 PHP 会话变量中,然后以某种方式重建 URL,但我希望它会比这更简单一些。谢谢你的想法

蓝色

【问题讨论】:

  • 简单地考虑一下,您可以将location.search 附加到所有<a href> 元素。
  • 哦,这听起来是个好主意——基本上脚本会遍历页面上的所有链接,然后在 url 为空时添加它?看起来这可能是我的解决方案? link
  • 您应该在生成分页 URL 时在服务器代码中执行此操作——在 JS 中执行此操作是不合适的(除非整个搜索操作是基于客户端的)

标签: php jquery session get


【解决方案1】:

可以尝试将其添加到所有<a href> 元素,但只有<a> 链接会将查询字符串传递到其他页面。无论如何,你可以这样做:

$('a').each(function() {
    $(this).attr("href",
                 $(this).attr("href") + 
                 (location.search == '' ? '?' : '&') + 
                 location.search.substring(1));
});

& 符号是为了确保任何查询字符串数据与新数据分开,而 '?'如果当前不存在查询字符串,则添加。 substring(1) 用于删除已经出现在location.search 中的前导?

我刚刚意识到,如果 <a> 还没有 ?,这将不起作用,但这应该不会太难解决。

【讨论】:

  • @pimvdb 这工作得很好。用一点额外的代码来检测?如果已经存在参数,则我网站中的每个链接都会在页面加载时正确构建。非常感谢!
  • @user658182:很高兴听到这个消息。我不想惹人厌烦,但如果某个答案对您有所帮助,请单击答案左侧的勾号来打勾。谢谢你:)
  • @pimvdb 说我需要 15 声望:/ 我会尽快获得街头声望,呵呵。
  • @pimvdb 我是 javascript 新手。如何检查 window.location.search 是否设置或为空? window.location.search == '';似乎对我不起作用 window.location.search.value.length
  • @user658182:对我来说,它确实可以正常工作。在此页面上,没有可用的查询字符串和location.search == ''。当您使用?blahblah 添加查询字符串时,然后使用location.serach == '?blahblah'。至于.length,你不应该也使用.value。就做location.search.length < 1(或者,只是== 0作为长度< 1基本上是== 0)。
【解决方案2】:

你使用什么代码进行分页?

如果我对问题的理解正确,您只需将搜索查询和邮政编码添加到“转到第 2 页”等 url。

简化版:

<a href="results.php?page=2&<?php
    echo 'query=' . rawurlencode($_GET['query']);
    if (isset($_GET['zip'])) echo '&zip=' . rawurlencode($_GET['zip']);
?>">Next page</a>

【讨论】:

    【解决方案3】:

    我认为这种持久化数据的最佳选择是使用会话。您的代码检查两件事,一个 GET 值和一个会话值。我们假设如果两者都存在,您将获取 GET 值。这允许用户提交一个新的并覆盖旧的。

    session_start();
    $zip = '';
    if($_GET['zip'])
    {
        //validate zip as needed
        $zip = $_GET['zip'];
        $_SESSION['zip'] = $zip;
    }
    elseif($_SESSION['zip'])
    {
        $zip = $_SESSION['zip'];
    }
    else
    {
        //handle default case
    }
    

    然后,当您的 PHP 代码需要引用邮政编码进行查询等时,请使用 $zip 中的值。这样您就不必依赖页面本身来处理 zip 值 - 您可以将其存储在服务器端并在需要时随时使用。

    【讨论】:

      猜你喜欢
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      • 2013-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多