2012-01-12 63 views
1

当我打电话通过我该如何引用在html中传递给javascript的参数?

<script type="text/javascript" 
     src="include/javascript/test_something.js?v=1128557"></script> 

剧本我怎么是指在html传递的变量V?

在此先感谢!

+0

我更新我的帖子,当我发布的代码的HTML解析得到。 – aspectplatinum 2012-01-12 02:37:21

+0

您使用的是哪种服务器端技术? – 2012-01-12 02:49:43

+0

这个值(1128557)来自哪里? – 2012-01-12 02:59:25

回答

1

最简单的方法是使用服务器端的技术。这是在PHP中。

<?php 
$v=1128557; 
?> 
<script type="text/javascript"> 
    //This will make this value available to javascript too 
    var val=<?php=$v?>; 
</script> 
<script type="text/javascript" 
     src="include/javascript/test_something.js?v=<?php=$v?>"></script> 

... 
... 
... 
<div id='baba<?php=$v?>'> 
... 
... 
</div> 

这将转换为以下HTML

<script type="text/javascript"> 
    //This will make this value available to javascript too 
    var val=1128557; 
</script> 
<script type="text/javascript" 
     src="include/javascript/test_something.js?v=1128557"></script> 

... 
... 
... 
<div id='baba1128557'> 
... 
... 
</div> 
+0

我不认为你已经正确地阅读了这个问题。我们正在寻找一种方法来找出传递给javascript的选项,而不是服务器端脚本 – 2012-01-12 02:52:25

+0

@Milad Naseri我阅读并理解了这个问题。我相信我的解决方案是正确的(至少它是最简单的一个)。他知道预先设定的价值,为什么他需要实现所有那些人们提出的时间和方法,并且简单和简单的解决方案,以便在html页面中重复各个部分? – 2012-01-12 02:57:52

+0

你可能是对的,但这只是假设。根据评论,我会说我们没有这个选择。即使我们这样做了,稍后可能需要一个懒惰加载的JavaScript来访问这些数据。甚至,所讨论的JavaScript可能会被客户端的另一个脚本延迟加载。 – 2012-01-12 03:01:14

-1

你应该做到以下几点:

var scripts = document.getElementsByTagName('script'); 
var data = {}; 
for (var i = 0; i < scripts.length; i ++) { 
    if (!scripts[i].src) { 
     continue; 
    } 
    var value = scripts[i]..substring(scripts[i].indexOf('?') + 1); 
    var params = value.split('&'); 
    for (var i = 0; i < params.length; i ++) { 
     params[i] = params[i].split('='); 
     data[params[i][0]] = params[i][1]; 
    } 
} 

编辑:只是加入了一些别人的提示,并把它们添加到我自己的答案。

-1

JavaScript只能访问正在执行的页面的URL数据执行通过window.location。它不能访问任何传递给JavaScript文件本身的HTTP请求变量,除非Web服务器将其显式序列化为输出中的JavaScript。

一个黑客/解决方法是找到脚本标记,获取src属性,解析URL并提取所需的GET参数。

function getParamsFor(script) { 
    var params, anchor, paramArray, keyVal, tag, scripts; 

    scripts = document.getElementsByTagName("script"); 

    // Make sure [].filter exists beforehand 
    tag = Array.prototype.filter.call(scripts, function (e) { 
     return e.src.indexOf(script) > -1; 
    })[0]; 

    if (tag) { 
     anchor = document.createElement("a"); 
     anchor.href = tag.src; 

     paramArray = anchor.search.substring(1).split('&'); 
     params = {}; 

     for(var i = 0; i < paramArray.length; i++) { 
      keyVal = paramArray[i].split('='); 
      params[unescape(keyVal[0])] = (typeof keyVal[1] != "undefined") ? unescape(keyVal[1]) : keyVal[1]; 
     } 

     return params; 
    } 
} 

var o = getParamsFor("test_something.js"); 
o.v; // 112.. 
+0

什么是downvote? – 2012-01-12 03:10:02

+0

此代码有点冗长,但显然也完成了这项工作。谢谢! – aspectplatinum 2012-01-12 19:05:13

1

从上次脚本元素在你的页面的src属性得到它:

var scripts = document.getElementsByTagName("script"); 
var src = scripts[scripts.length - 1].src; 
var v = null; 
if (/\?v=(.+)$/.test(src)){ 
    v = RegExp.$1; 
} 
+1

为什么最后一个脚本元素? :-) – 2012-01-12 02:48:57

+0

是的,为什么最后?我认为在上面写的所有脚本元素SRC而不是'window.location.href'上运行的代码会起到诀窍的作用。 – 2012-01-12 02:50:54

+1

因为当脚本执行时,它的元素是页面上的最后一个元素。当然,如果你等到页面加载完毕,你的工作就会变得更加困难。我正在编辑我的答案,以包括一个解释说明,但我在我的手机上输入,你的评论比我可以更快地编辑我的答案。 – gilly3 2012-01-12 02:53:05

-1

将其更改为

<script type="text/javascript" 
     src="include/javascript/test_something.php?v=1128557" /> 

然后创建脚本test_something.php

<?php 
echo "var queryString='" . $_SERVER[`QUERY_STRING] . "'\n;"; 
?> 
... rest of javascript here 

你甚至可以执行Ë使用PHP检查/解析查询字符串,或者只是让Javascript来做到这一点。

1

如果它是第一个脚本代码的网页时,你可以这样做:

var thescripttag = document.getElementsByTagName('script'); 
var v = thescripttag[0].src.replace(/^[^\?]+\??/,''); //gets everything after the '?' 

如果它不是第一个脚本标签,您可以更改[0]是它是哪一个,或者尝试为脚本标记分配一个id(未测试)。

0

您可以通过查找所需的文件名并从.src URL中获取相关参数来找到相应的脚本标记。

function findScriptParams(fname) { 
    fname = "/" + fname + "?"; 
    var scripts = document.getElementsByTagName("script"); 
    for (var i = 0; i < scripts.length; i++) { 
     var pos = scripts[i].src.indexOf(fname); 
     if (pos != -1) { 
      return(scripts[i].src.substr(pos + fname.length)); 
     } 
    } 
} 

然后您可以调用它像这样:

var params = findScriptParams("test_something.js"); 
if (params) { 
    // process the params here 
} 
相关问题