在窗口加载时通过URL将值传递给JS函数

时间:2011-10-14 16:49:48

标签: javascript url variables get onload

我的页面http://www.dinomuhic.com/2010/index.php使用onLoad调用在页面开头加载Showreel,如下所示:

<body onLoad="sndReq('96')">

96是SQL库中showreel的ID。 JS函数“sndReq”是一个使用JQuery的AJAX调用,它打开所请求的项目并在主窗口中显示它。

现在我的问题:如果我想直接打开特定项目的客户端发送链接,以便他不必浏览网站,该怎么办?

http://www.dinomuhic.com/2010/index.php?sndReq=234之类的东西(当然现在不起作用,只是打开showreel,可能是因为body标签中的onLoad会覆盖它)

我该如何实现?我希望能够通过URL打开特定项目,但如果没有通过URL传递任何内容,则应始终打开项目96。

提前谢谢你。我很确定它很容易就看不到它。

克莱图斯

3 个答案:

答案 0 :(得分:5)

您需要解析查询字符串。我发现处理查询字符串的最简单方法是执行以下操作。首先,您需要从URL中提取查询字符串:

var queryStr = window.location.search; // will give you ?sndReq=234

然后,您可以删除?并将每个查询字符串参数拆分为一个数组:

var paramPairs = queryStr.substr(1).split('&');

现在,您可以构建构成查询字符串的名称/值对的哈希表对象:

var params = {};
for (var i = 0; i < paramPairs.length; i++) {
    var parts = paramPairs[i].split('=');
    params[parts[0]] = parts[1];
}

onload中,您现在可以使用该参数:

sndReq(params.sndReq);

确保代码在文档head的脚本中运行,以便在onload执行之前计算。

答案 1 :(得分:4)

如果您使用的是jQuery,为什么不使用支持DOM的处理程序而不是onload?在那个注释中,如果它只是一个ajax请求,你甚至不需要等待DOM就绪。如果您解析查询,则应该能够将其传递给现有函数。

// Wait for DOM-ready, may not be needed if you are just
// making a request, up to you to decide :)
$(function() {
    // window.location.search represents the query string for
    // current URL, including the leading '?', so strip it off.
    var query = window.location.search.replace(/^\?/, "");

    // If there is no query, default to '96'
    if ( !query ) {
        query = '96';
    }

    // Call existing function, passing the query value
    sndReq( query );
});
希望有所帮助!欢呼声。

答案 2 :(得分:1)

您可以使用RegExp来完成此操作,阅读url参数并将它们传递给ajax。

这个简单的脚本将读取当前网址并通过正则表达式过滤您指定的参数。

  • EG:ThisReq = gip('sndReq');从网址中提取sndReq和值。

<script language="javascript">
    function gip(name) {
        name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
        var regexS = "[\\?&]" + name + "=([^&#]*)";
        var regex = new RegExp(regexS);
        var results = regex.exec(window.location.href);
        if (results == null)
            sndReq('96');
         else
            return results[1];
    }
    // parameter pulled from url.
    ThisReq = gip('sndReq');
    // executes function sndReq();
    sndReq(''+ThisReq+'');
</script>