如何使用jQuery和PHP在多个页面上维护GET Url参数?

时间:2011-03-16 19:38:54

标签: php jquery session get

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

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

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

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

3 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:2)

我认为这种持久数据的最佳选择是使用会话。您的代码检查两件事,一个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值 - 您可以将其存储在服务器端并在需要时随时使用。

答案 2 :(得分:0)

您用于分页的代码是什么?

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

简化版:

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