我有一个使用GET表单的网站允许用户指定邮政编码,然后根据该条目提供按距离排序的结果。如果没有zipcode,则只显示所有结果。
我的代码很棒。问题是当我从第1页更改为第2页时,我丢失了查询字符串。
由于其他技术原因,我无法使用POST方法。具体来说,我需要能够以某种方式保存此查询状态并检查所请求页面的URL,如果它是空的,则重新获取该查询字符串。
有关如何做到这一点的任何想法?该网站使用了大量的jQuery,但我不确定jQuery是否有办法在多个页面中记住这个字符串。该网站也使用PHP。我不介意将结果存储在PHP会话变量中,然后以某种方式重建URL,但我希望它会比那更直接。谢谢你的想法
蓝
答案 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>