Javascript 在窗口加载时通过URL将值传递给JS函数
“我的页面”在页面开始处使用onLoad调用在正文中加载Showreel,如下所示:Javascript 在窗口加载时通过URL将值传递给JS函数,javascript,url,variables,get,onload,Javascript,Url,Variables,Get,Onload,“我的页面”在页面开始处使用onLoad调用在正文中加载Showreel,如下所示: <body onLoad="sndReq('96')"> 96是SQL库中showreel的ID。 JS函数“sndReq”是一个使用JQuery的AJAX调用,它打开请求的项并在主窗口中显示它 现在我的问题是:如果我想发送一个链接到一个直接打开一个特定项目的客户机,这样他就不必浏览网站了,该怎么办 类似这样的东西(当然现在不起作用,只是打开了showreel,可能是因为body标记中的onL
<body onLoad="sndReq('96')">
96是SQL库中showreel的ID。
JS函数“sndReq”是一个使用JQuery的AJAX调用,它打开请求的项并在主窗口中显示它
现在我的问题是:如果我想发送一个链接到一个直接打开一个特定项目的客户机,这样他就不必浏览网站了,该怎么办
类似这样的东西(当然现在不起作用,只是打开了showreel,可能是因为body标记中的onLoad覆盖了它)
我如何实现这一点?我希望能够通过URL打开特定的项目,但如果没有任何内容通过URL传递,则应该始终打开项目96
先谢谢你。我相信这很简单,我就是看不见
Cletus如果您使用的是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 );
});
希望有帮助!干杯。您可以使用RegExp来完成此任务,读取url参数并将其传递给ajax 这个简单的脚本将读取当前url,并通过正则表达式过滤指定的参数
- 例如:ThisReq=gip('sndReq');从url中提取sndReq和值
功能gip(名称){
名称=名称。替换(/[\[]/,“\\\[”)。替换(/[\]]/,“\\\]”);
var regexS=“[\\?&]”+name+“=([^&\\]*)”;
var regex=新的RegExp(regexS);
var results=regex.exec(window.location.href);
如果(结果==null)
sndReq('96');
其他的
返回结果[1];
}
//从url中提取的参数。
ThisReq=gip(“sndReq”);
//执行函数sndReq();
sndReq(“”+ThisReq+“”);
您需要解析查询字符串。我发现处理查询字符串的最简单方法是执行以下操作。首先,您需要从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
之前对其进行计算。window.location.search
已具有此值(比手动解析更可靠)。另外,如果不需要,为什么还要添加到额外的全局变量(gip
和ThisReq
)中呢?我在本例中添加这些全局变量是因为我有9个以上的参数要过滤,都是动态的。我想我只是不知道更好的方法pfWidth=gup(“宽度”);pfHeight=gup(“高度”);pfThumbs=gup(“拇指”);pfThumbSize=gup(“拇指尺寸”);pftheURL=gup('theURL');pfAppID=gup(“AppID”);pftheID=gup(“theID”);pfDefault=gup('SetDefault');pfAlbum=gup('DefaultAlbum')`如果字符串包含hash#?它将出现在window.location.hash
,而不包含在window.location.search
。谢谢,我将您的和keeganwatkins的解决方案组合成了一个非常适合我的解决方案!再次感谢你们两位!如果有人想知道:var queryStr=window.location.search;var paramPairs=queryStr.substr(1.split('=');var query=paramPairs[1];如果(!query){query='96';}sndReq(query)代码>嘿,谢谢,我知道如何用查询调用替换body标记中的onLoad。但其余的都不起作用。给我留下一个没有显示任何项目的页面。我必须把整个函数放在哪里?或者将函数中的所有内容都放在my window.ready函数中就足够了吗?您应该能够将该函数放在head
标记中,或者将该函数中的代码添加到另一个DOM就绪处理程序中(如果您已经有了)。如果在调用sndReq
之前执行console.log(query)
,它是否具有您期望的值?我将它放入window.ready函数中,如下所示var queryStr=window.location.search;var paramPairs=queryStr.substr(1.split('=');var query=paramPairs[1];如果(!query){query='96';}sndReq(query)代码>成功了。非常感谢你
var params = {};
for (var i = 0; i < paramPairs.length; i++) {
var parts = paramPairs[i].split('=');
params[parts[0]] = parts[1];
}
sndReq(params.sndReq);