从URL参数预设javascript变量

时间:2013-12-24 18:20:44

标签: javascript php jquery ajax

想象一下,我有一个脚本abc.js,它有一个全局变量userid。加载后会立即发出几个AJAX请求(在浏览器解析 DOM 之后 我需要脚本为不同的用户提供不同的变量值。在JS可用后,必须立即提出请求。这就是我要找的东西:

  • 浏览器向/js/abc.js?userid=12345
  • 发出请求
  • 服务器解析userid = 12345并将 userid = 12345 添加到脚本
  • 服务器将脚本返回给用户
  • 浏览器解析脚本,userid设置为12345,然后一切都正常处理。

有没有办法用一些Apache / Lighttpd扩展来做到这一点?由于我不能在文档的开头依赖<script>userid=12345</script>,因为abc.js很可能会在评估userid=12345之前执行。

2 个答案:

答案 0 :(得分:1)

在调用abc.js脚本之前,您可以简单地使用PHP输出javascript变量。在这种情况下,参数将传递给主PHP脚本(即页面)。像这样:

<script type="text/javascript">
var userid = <?php echo $_GET['userid']; ?>;
</script>
<script type="text/javascript" src="/js/abc.js">

当然,您可能希望在使用它之前清理PHP中的参数值。

在这里,abc.js只能在全局范围内引用userid的值。不需要将userid传递给URL中的脚本,并且Apache使用PHP来动态生成js文件。实际上,您可能不希望使用该方法,因为它会阻止脚本的最佳浏览器缓存。

如果您不想要涉及PHP,您可以使用其他选项来传递此数据,例如@yent,HTML5 localStorage,cookies等提供的URI解析选项。

答案 1 :(得分:0)

您可以解析window.location.search并设置window属性:

var p = window.location.search.substr(1).split(/&/);
if(p.length && p[0]) for(var i=0; i<p.length; i++) {
    var a = p[i].split(/=/);
    window[a[0]] = a[1];
}