【问题标题】:How to access a query-string in a javascript file如何访问 javascript 文件中的查询字符串
【发布时间】:2012-09-19 23:42:00
【问题描述】:

可能重复:
How can I get query string values?

比方说,我们在 HTML 标记中有一个像这样的 <script> 标记

<script src="/path/file.js?test=1&data=2"></script>

..有什么方法可以访问file.js 中的查询字符串? window.location 当然不会改变,所以你不能使用它。

如果这不可能,你如何将数据传递到脚本文件中?

【问题讨论】:

  • 你可以给脚本标签一个id,它可以访问脚本元素。
  • 在另一个帖子中回答:stackoverflow.com/questions/901115/…
  • 这个问题已经在这里被问过很多次了。搜索比输入问题要快。
  • @sharvell:那是一个完全不同的问题。 LeeTaylor:你阅读和理解不同类型的问题会不会那么尴尬。

标签: javascript html query-string


【解决方案1】:

Musa 在这里采用了正确的方法(来自 cmets)。您可以像访问任何其他标记一样访问脚本标记(您可以使用 ID 来简化操作):

<script id='my_script_1' src="/path/file.js?test=1&data=2"></script>

然后只需解析出 src 并仅获取查询字符串:

var js_lib = document.getElementById('my_script_1');
var js_url = js_lib.src;
var js_url_pieces = js_url.split('?');
alert(js_url_pieces[1]);

注意:为简单起见,我使用 split 。你可能想use regex

如果要重新加载js文件,只需重置源即可:

js_lib.src = js_url_pieces[0]+'?new query string';

我认为这应该适用于大多数浏览器。

或者,正如其他人所提到的,您可能想要编写更灵活的函数或使用全局变量来通过 _GET vars 实现您想要做的事情。

【讨论】:

    【解决方案2】:

    我能想到的唯一可靠方法是通过document.currentScript,但目前只有 Firefox 支持。

    This question 可能有一些有用的信息。

    要将数据传递到脚本文件中,我可以使用全局变量。总的来说,我不太喜欢它们,但这可能是它们的合适用途。

    【讨论】:

    • 那么将数据传递到外部脚本文件的最佳做法是什么?
    • 也许是全局变量?总的来说,我不太喜欢它们,但这可能是它们的合适用途。
    【解决方案3】:

    听起来您想将一些数据从父文档传递到包含的 javascript 文件中。你可以用一个全局变量来做,像这样

    你的文件.html:

    <script>
    var myVar = "Hi";
    </script>
    <script src="script.js"></script>
    

    script.js:

    alert(myVar);
    

    【讨论】:

      【解决方案4】:

      当脚本运行时,该脚本是页面上的最后一个元素(由于 JavaScript 被阻塞)。您可以利用这一点:

      var scripts = document.getElementsByTagName('script'),
          me = scripts[scripts.length-1],
          myurl = me.getAttribute("src"),
          myquery = myurl.split("?")[1].split("#")[0].split("&"),
          qcount = myquery.length, query = {}, i, tmp;
      for( i=0; i<qcount; i++) {
          tmp = myquery[i].split("=");
          query[decodeURIComponent(tmp[0])] = decodeURIComponent(tmp[1]);
      }
      

      请注意,这只有在代码的最外层范围内才有效,即。不在函数中。它也不适用于异步或延迟脚本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-09
        • 2013-08-04
        • 2018-03-05
        • 2012-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多