【问题标题】:How can I redirect with extra information in jquery?如何在 jquery 中使用额外信息重定向?
【发布时间】:2023-04-07 00:16:01
【问题描述】:

我想执行重定向,但我也想发送附加信息。

我尝试更改 window.location.href 的值,但这似乎并没有传递额外的信息。

我也知道该怎么做

    $.get(
        new_url,
        {data : "mydata"},
        function(data) {
           alert('page content: ' + data);
        }
    );

这将显示新页面的 html 内容,但这无助于实际到达那里。 我怎样才能做到这一点?

编辑:我觉得我的措辞非常糟糕,因为我很确定这是一项简单/常见的任务。这不应该是需要 cookie 的东西 - 它基本上应该像一个 post 请求(我认为)。

【问题讨论】:

  • 不能用localStorage吗?
  • 等等,你试过什么?不行//test.com?extraparam=what吗?现在我只是想知道你所说的additional information是什么意思???而是解释您的预期行为
  • 可以在jQuery中生成表单并提交(POST/GET)
  • @A.Wolff,通过附加信息,我的意思是您可能与 python 请求对象一起传递的字典。感谢您的帮助。
  • 目标是重定向。

标签: javascript jquery html redirect


【解决方案1】:

你有几个不同的选择:

  • URI 变量 - 您可以通过附加问号 (?) 后跟一组键值对 URL 附加额外的数据,这些键值由 & 号 (=) 分隔,每个变量由 & 号 ( &)。例如,http://www.google.com/search?q=javascript+url+variables&ie=UTF-8 为您提供了一个使用 UTF-8 编码的 Google 搜索“javascript url variables”的链接。您的 PHP 代码或 JavaScript 需要处理传递和处理这些变量。如果使用 JavaScript 处理 URL 的一个不错的库是 URI.js 或使用 PHP,您可以使用 parse_url 和 http_build_query 函数。您可以将其与window.location.href 一起使用;例如:window.location.href = "http://www.google.com/search?q=javascript+url+variables&ie=UTF-8"(将 Google 网址替换为您在变量中创建或设置的网址)。
  • Storage API - 您可以使用 localStorage 或 sessionStorage 属性来使用 JavaScript 存储和检索信息(信息存储在用户的浏览器中 - 受 IE 8 和更新版本以及所有其他主要浏览器支持)。请注意,这只是 JavaScript,除非您使用 JavaScript 获取数据并通过 URL 变量、表单、AJAX 请求等将其传递给您的 PHP 服务器。
  • Cookie - 您可以在 cookie 中存储其他信息 - 但是这更加困难,因为您必须将变量设置为 parsable string(可能是 JSON)并记住在设置/时对字符串进行编码/解码得到饼干。我不推荐这种方法。
  • IndexedDB API - 这是一种更高级的客户端/浏览器存储机制,目前仅支持 IE 10 和更新版本(以及几乎所有其他浏览器)。该标准也仍在进行更改,这意味着较新版本的浏览器可能会破坏当前的实现或出现错误。如果您只需要简单的键值存储(不是类似 SQL 的数据库),那么您应该坚持使用上述选项之一。

【讨论】:

  • URI 变量是为我做的。 :)
  • @Everyone_Else - 很高兴你能弄清楚 :-)
【解决方案2】:

您可以使用窗口打开方法来重定向您的用户,并记住使用“_self”

window.open('url','_self');

【讨论】:

  • 感谢您的回答,但这不允许我传递任何其他信息。
  • 我不明白你面临什么问题,你能告诉我更多吗?
【解决方案3】:

最好将数据存储在 localStorage 中并回退到 cookie(我真的很喜欢 js-cookie)。

以下是存储和检索数据所需的两个辅助函数:

function setMultiPageData(itemName, data) {
    var dataStr = JSON.stringify(data);

    var hasLocalStorage = typeof localStorage !== 'undefined';
    if (hasLocalStorage) {
        localStorage.setItem(itemName, dataStr);
    }
    else {
        Cookies.set(itemName, dataStr, { path: '/' }); // path set to root to make cookie available on any page
    }
}

function getMultiPageData(itemName) {
    var data = null;

    var hasLocalStorage = typeof localStorage !== 'undefined';
    if (hasLocalStorage) {
        data = localStorage.getItem(itemName);
    }

    if (!hasLocalStorage || data === null) {
        data = Cookies.get(itemName);
    }

    var parsedObject = null;
    try {
        parsedObject = JSON.parse(data);
    }
    catch (ex) {
        console.log(ex); // remove in production
    }

    return parsedObject;
}

用法:

var data = { first: 'this is the first thing', second: 'this is the second thing' };
setMultiPageData('stackoverflow-test', data);

// go to a new page
var retrievedData = getMultiPageData('stackoverflow-test');
if (retrievedData === null) {
    console.log('something went wrong')
}
else {
    console.log(retrievedData); // { first: 'this is the first thing', second: 'this is the second thing' }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 2017-05-26
    相关资源
    最近更新 更多