Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将参数传递到.js文件_Javascript - Fatal编程技术网

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>