如何使用 jQuery 和 PHP 跨多个页面维护 GET Url 参数?
Posted
技术标签:
【中文标题】如何使用 jQuery 和 PHP 跨多个页面维护 GET Url 参数?【英文标题】:How do I maintain GET Url arguments across multiple pages with jQuery and PHP? 【发布时间】:2011-07-16 21:25:18 【问题描述】:我有一个网站,它使用 GET 表单允许用户指定邮政编码,然后根据该条目提供按距离排序的结果。如果没有邮政编码,则仅显示所有结果。
我的代码运行良好。问题是当我从第 1 页更改为第 2 页时,我丢失了查询字符串。
由于其他技术原因,我不能使用 POST 方法。具体来说,我需要能够以某种方式保存此查询状态并检查所请求页面的 url,如果该查询字符串为空,则重新附加该查询字符串。
关于如何做到这一点的任何想法?该网站使用了大量的 jQuery,但我不确定 jQuery 是否有办法在多个页面中记住这个字符串。该站点也使用 php。我不介意将结果存储在 PHP 会话变量中,然后以某种方式重建 URL,但我希望它会比这更简单一些。谢谢你的想法
蓝色
【问题讨论】:
简单地考虑一下,您可以将location.search
附加到所有<a href>
元素。
哦,这听起来是个好主意——基本上脚本会遍历页面上的所有链接,然后在 url 为空时添加它?看起来这可能是我的解决方案? link
您应该在生成分页 URL 时在服务器代码中执行此操作——在 JS 中执行此操作是不合适的(除非整个搜索操作是基于客户端的)
【参考方案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 值 - 您可以将其存储在服务器端并在需要时随时使用。
【讨论】:
以上是关于如何使用 jQuery 和 PHP 跨多个页面维护 GET Url 参数?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 jQuery AJAX 加载跨域 html 页面?