Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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 在窗口加载时通过URL将值传递给JS函数_Javascript_Url_Variables_Get_Onload - Fatal编程技术网

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

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

“我的页面”在页面开始处使用onLoad调用在正文中加载Showreel,如下所示:

<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);