Javascript 将参数传递到.js文件
我正在开发一个小部件。 其代码为:Javascript 将参数传递到.js文件,javascript,Javascript,我正在开发一个小部件。 其代码为: <script src="../test/js.js"></script> 现在我想把js字符串中的这些参数作为querystring传递给这个src 最终的src应如下所示: src="../test/content.aspx?place=us&list=0" 我需要帮助,因为我是js的新手。将参数传递给js文件中的函数,而不是作为查询字符串传递给文件本身 声明一个函数,如 function doSomething(pl
<script src="../test/js.js"></script>
现在我想把js字符串中的这些参数作为querystring传递给这个src
最终的src应如下所示:
src="../test/content.aspx?place=us&list=0"
我需要帮助,因为我是js的新手。将参数传递给js文件中的函数,而不是作为查询字符串传递给文件本身 声明一个函数,如
function doSomething(place, list) {
//do something with place
//do something with list
}
在其他JS中使用它作为doSomething('us',10)代码>
任何其他尝试做你已经开始做的事情都是被黑客攻击的。虽然您可以实现它,但它不是预期的设计。见相关帖子-
普遍的共识是不,不能或不应该这样做
--
编辑
几个月后,我知道了。这是脚本文件上查询参数的一个例外用例。考虑缓存设置为一年到期的情况。为了解决这个时间问题,,更改HTML href中的查询参数并不一定意味着您已经更改了脚本的内容,但它确实会带来额外的副作用,即中断一年的缓存到期时间。您的服务器根据参数重写js,或者在脚本标记之前在javascript中设置一些预定义变量。更简单的话:您希望在请求文件时使用查询参数的值来更改javascript文件。当然,这是可能的。不幸的是,这只能通过一点服务器端处理来完成
我不能建议/推荐任何服务器端使用这个,您需要自己解决这个问题
总的想法是:
服务器端接收请求并读取Javascript文件模板
然后,它调用模板处理器并要求它在适当的位置替换值。这些值是从HTTP GET参数检索的
然后,服务器端使用适当的缓存头、内容类型头向客户端提供该文件
我认为更好、更简单的方法是添加一个带有变量的额外脚本标记。如果保持非常简单,可以按如下方式执行,但对于大量变量,我将创建一个包含所有变量的对象:
<script type="text/javascript">
var place="us";
var list=0
</script>
<script type="text/javascript" src=....></script>`.
var place=“美国”;
变量列表=0
`.
如果要在src中执行此操作,有两个选项:
服务器将变量添加到脚本中。它获取对脚本的请求,并且不只是返回文件,而是用与上面类似的格式的变量作为前缀。这意味着这对服务器来说是额外的工作,因为它需要一个实际的脚本来运行,并且返回的文件更难缓存,尽管它是可行的(也取决于变体的数量)
或者,您可以让您的脚本找到正确的标记并解析其src
参数。这很难做到,因为脚本不知道自己的名称。特别是当您合并并最小化脚本时,脚本标记可能无法读取,因此您无法真正做到这一点。我将放弃此选项,对吗,al虽然我见过很多人不止一次尝试过
使用PHP的一个可能的解决方案是这样的
在您已有的文件夹中创建一个js.php
文件,并粘贴以下内容:
<?php
header('Content-type: text/javascript');
$string = ""; $i = 0;
foreach($_GET as $key => $value)
{
if($i == 0){
$string .= "?";
$string .= $key . '=' . $value;
$i++;
continue;
}
$string .= '&' . $key . '=' . $value;
};
echo "
var _html = '<div id=\"FJ_TF_Cont\" style=\"position: relative; padding: 0; margin: 0; border-width: 0px; width: 200px;\">'
+ '<iframe width=\"210\" height=\"640\" src=\"../test/content.aspx$string\" name=\"FJIframe\" scrolling=\"no\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" style=\"width: 210px; border-width: 0px; z-index: 1;\">'
+ '</iframe>'
+ '</div>';
document.write(_html);
";
?>
我支持@goleztrol的回答。
这是一个较小的(单脚本标记)版本
var place=“美国”;
var-list=0;
var script_tag=document.createElement('script');
script_tag.setAttribute(“type”、“text/javascript”);
script_tag.setAttribute(“src”和“”);
document.getElementsByTagName('body')[0].appendChild(脚本\标记);
希望这会有所帮助:)泛化并说不应该传递查询字符串参数有点错误。在某些情况下,这是一个相当好的主意。想想特定于用户的CSS。如果您认为CSS和JS文件是可通过模板处理器修改的动态资源,那么这是非常可能的。
function doSomething(place, list) {
//do something with place
//do something with list
}
<script type="text/javascript">
var place="us";
var list=0
</script>
<script type="text/javascript" src=....></script>`.
<?php
header('Content-type: text/javascript');
$string = ""; $i = 0;
foreach($_GET as $key => $value)
{
if($i == 0){
$string .= "?";
$string .= $key . '=' . $value;
$i++;
continue;
}
$string .= '&' . $key . '=' . $value;
};
echo "
var _html = '<div id=\"FJ_TF_Cont\" style=\"position: relative; padding: 0; margin: 0; border-width: 0px; width: 200px;\">'
+ '<iframe width=\"210\" height=\"640\" src=\"../test/content.aspx$string\" name=\"FJIframe\" scrolling=\"no\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" style=\"width: 210px; border-width: 0px; z-index: 1;\">'
+ '</iframe>'
+ '</div>';
document.write(_html);
";
?>
<script src="../test/js.js?place=us&list=10"></script>
<script src="../test/js.php?place=us&list=10"></script>
<script type="text/javascript">
var place="us";
var list=0;
var script_tag = document.createElement('script');
script_tag.setAttribute("type","text/javascript");
script_tag.setAttribute("src", "<your-js-src>");
document.getElementsByTagName('body')[0].appendChild(script_tag);
</script>