如何使用 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/JQuery 调用多个 PHP 脚本?

如何使用 jQuery AJAX 加载跨域 html 页面?

使用 JQuery、PHP 和 MySQL 为实时统计页面优化多个连续的 ajax 调用

如何使用jQuery AJAX加载跨域html页面?

跨多个域使用一个 Jquery 警报