【问题标题】:Getting the value of # from a url从 url 中获取 # 的值
【发布时间】:2018-02-01 20:36:44
【问题描述】:

我有问题。我有一个网站正在开发。我创建了一个 php 脚本来使用分页从数据库中获取所有收据 id,并且一切正常。但问题是每个收据 id,我添加了一个链接,以便在单击时显示指定的结果而不加载页面。

链接如下:

G145252 G785965 和点击每个链接时会显示http://test.com/?go=any#G145252

点击后页面不会重新加载。

所以我需要帮助的是,在使用 javascript 单击链接并使用 html 打印后,如何从 url 中获取G145252

我需要将值作为$GET 值传递给process.php,这样我就可以在不重新加载页面的情况下加载所点击ID 的收据详细信息。

请注意:#value之前有很多get值我需要从url地址中取出来。

【问题讨论】:

  • 试试window.location.hash.substr(1)
  • 哈希规范的一部分是不将其发送到服务器。这就是为什么像 mega 等一些加密服务可以说他们不知道打开内容所需的密钥。只是因为链接包含这种哈希背后的关键。你真的必须找到一个更好的解决方案。
  • 正如@GottZ 提到的,散列部分或片段标识符只能在应用程序的客户端部分中使用。如果你想在你的服务器端代码中使用这些数据,你应该考虑使用查询参数。
  • @CarstenLøvboAndersen,您的答案是完美的。谢谢。
  • @dean 没问题

标签: javascript php jquery html ajax


【解决方案1】:

您不应该将 URI 的片段标识符部分用于服务器端相关任务。本节仅用于客户端操作。更多信息here.

您可以使用一些其他方式,例如查询参数来访问这些数据。

例如转这个:

http://test.com/enter code here?go=any#G145252

进入这个:

http://test.com?go=any&hash=G145252

然后:

function getQueryVariable(variable) {
       var query = window.location.search.substring(1);
       var vars = query.split("&");
       for (var i=0;i<vars.length;i++) {
               var pair = vars[i].split("=");
               if(pair[0] == variable){return pair[1];}
       }
       return(false);
}

console.log(getQueryVariable("go"));   // any
console.log(getQueryVariable("hash")); // G145252

注意:我知道这不是您实际问题的确切答案,但问题本身提出了一个不好的实践场景,因此我的建议。

getQueryVariable 函数的功劳归 CSS Tricks:https://css-tricks.com/snippets/javascript/get-url-variables/?test=3&test2=5

【讨论】:

  • 如果我使用您的想法,页面将重新加载,并且我不希望在单击链接时页面重新加载。
  • 您应该考虑替代解决方案,例如使用 JavaScript 事件处理程序使用所需参数调用您的端点,仍然应该避免使用哈希值进行服务器端操作。
  • 有问题的页面有很多保护。
【解决方案2】:

假设您使用的是 jQuery。

  1. 更改所有链接,使它们具有通用类名,例如“hashClick”,例如
<a href="http://test.com?go=any#G145242" class="hashClick">My Link</a>
  1. 要在单击时获取哈希部分,请为这些链接添加单击事件处理程序
$('.hashClick').click( function(event) {
    event.preventDefault();
    var url = $(this).attr('href');
    var hash = url.substring(url.indexOf('#')+1);
    alert("You clicked " + hash);

    // or at this point you can do an AJAX call 
    // or GET request to process.php with hash as one of the parameters
})

【讨论】:

    【解决方案3】:

    假设这是链接 http://test.com/?go=any#G145252 获取哈希值

    window.location.hash 
    

    这将返回您#G145252 和

    window.location.hash.substring(1) will return you "G145252"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-28
      • 2016-09-23
      • 2012-02-01
      • 1970-01-01
      • 2020-09-18
      相关资源
      最近更新 更多