js文件传参

http://www.cnblogs.com/Lewis/archive/2010/05/13/1734694.html

JS文件传参及处理技巧

其实为js文件传参是很久就接触过的一个问题,只是一直没有放在心上,今天在无忧看到又有人问这个问题,今日总结一下。

解决思路:

1、首先获取到当前JS文件的SRC属性,这里有一个小技巧:我们只需要获取当前页面最后一个script标记内容即可。
为什么??因为JS是顺序解析的,当前JS脚本解析时后面的js都还没有解析到,当然就认为自己就是最后一个script了。此外,这样获取还有一个好处:我们可以多次引用同一个文件且传入不同的参数,这样可以在js文件中根据参数不同做不同处理,很巧妙把!简直就是动态语言了。
代码如下:
  var scripts=document.getElementsByTagName("script");
  var curJS=scripts[scripts.length-1];   //curJS就是我们当前的js文件

 

得到这个就好办了,通过curJS.src即可获取到完整的路径内容(包括参数)。

2、下面的就是解析参数内容了,解析的过程相当简单,相信很多人都容易完成这一步。
但我们要对一个特殊情况进行处理:如果一个参数被传入了多次,则要将该参数值转换为数组存储每一个传入的值。


完整测试脚本如下:

  var getArgs=(function(){
    var sc=document.getElementsByTagName('script');
    var paramsArr=sc[sc.length-1].src.split('?')[1].split('&');
    var args={},argsStr=[],param,t,name,value;
    for(var i=0,len=paramsArr.length;i<len;i++){
            param=paramsArr[i].split('=');
            name=param[0],value=param[1];
            if(typeof args[name]=="undefined"){ //参数尚不存在
                args[name]=value;
            }else if(typeof args[name]=="string"){ //参数已经存在则保存为数组
                args[name]=[args[name]]
                args[name].push(value);
            }else{  //已经是数组的
                args[name].push(value);
            }
    }
    /*在实际应用中下面的showArg和args.toString可以删掉,这里只是为了测试函数getArgs返回的内容*/
    var showArg=function(x){   //转换不同数据的显示方式
        if(typeof(x)=="string"&&!//d+/.test(x)) return "'"+x+"'";   //字符串
        if(x instanceof Array) return "["+x+"]" //数组
        return x;   //数字
    }
    //组装成json格式
    args.toString=function(){
        for(var i in args) argsStr.push(i+':'+showArg(args[i]));
        return '{'+argsStr.join(',')+'}';
    }
    return function(){return args;} //以json格式返回获取的所有参数
})();

alert(getArgs());
alert("username:"+getArgs()["username"]);

  

测试示例的HTML源码:

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title> new document </title>
  <meta name="generator" content="editplus" />
  <meta name="author" content="" />
  <meta name="keywords" content="" />
  <meta name="description" content="" />
  <script type="text/javascript" src="test.js?id=4&username=yemoo&id=1&uid=110"></script>
  <script type="text/javascript" src="test.js?id=5&username=ajaxbbs&id=7&uid=253"></script>
  <script type="text/javascript" src="test.js?id=6&username=jack&id=8&uid=258"></script>
</head>
<body>
</body>
</html>

文章转自:http://www.cnitblog.com/yemoo/archive/2008/03/11/40799.html

 

分类:  JavaScript技术
标签:  js传参
0
0
(请您对文章做出评价)
« 上一篇: [原创]jQuery动画弹出窗体支持多种展现方式
» 下一篇: Asp.net缓存动态图片
posted @ 2010-05-13 16:48  Ricebug 阅读(82)  评论(0)  编辑  收藏

所给引用中未提及静态文件向正常文件传参的方法相关内容。不过在不同的编程场景下,通常有以下几种常见方法: ### Web开发场景 在Web开发中,若静态文件是前端文件(如HTML、JavaScript),正常文件是后端文件(如Python的Flask、Django,Java的Spring等),可以通过HTTP请求传参。 #### 前端使用AJAX发送请求 以JavaScript为例: ```javascript // 创建一个XMLHttpRequest对象 var xhr = new XMLHttpRequest(); // 配置请求 xhr.open('POST', 'backend-url', true); xhr.setRequestHeader('Content-Type', 'application/json'); // 要传递参数 var data = { param1: 'value1', param2: 'value2' }; // 发送请求 xhr.send(JSON.stringify(data)); ``` #### 后端接收请求并获取参数 以Python的Flask为例: ```python from flask import Flask, request app = Flask(__name__) @app.route('/backend-url', methods=['POST']) def receive_params(): data = request.get_json() param1 = data.get('param1') param2 = data.get('param2') return f"Received param1: {param1}, param2: {param2}" if __name__ == '__main__': app.run() ``` ### 移动开发场景 在Android开发中,静态文件(如XML)向Java文件传参可以通过资源引用和Intent传参等方式。 #### XML中定义资源 在`strings.xml`中定义参数: ```xml <resources> <string name="param1">value1</string> </resources> ``` #### Java代码中获取资源 ```java import android.os.Bundle; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String param1 = getResources().getString(R.string.param1); TextView textView = findViewById(R.id.textView); textView.setText(param1); } } ``` ### 数据库操作场景 在MyBatis-Plus中,XML映射文件(静态文件)可以引用Java类的静态方法传参。不过要注意避免SQL注入问题,使用`${}`调用静态方法,使用`#{} `引用传入参数。 ```xml <select id="selectWithStaticMethod" resultType="java.lang.String"> SELECT * FROM some_table WHERE some_column = ${@com.example.TenantIdHolder@getTenantId('some_value')} </select> ``` ```java public class TenantIdHolder { public static String getTenantId(String param) { return "static_" + param; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值