首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript Url参数解析

Javascript Url参数解析
EN

Stack Overflow用户
提问于 2012-05-16 06:09:20
回答 5查看 21.1K关注 0票数 3

所以,我真的需要一些帮助。我已经做了大量的搜索,我找到的一些解决方案很好,但对我来说不起作用,所以这里是这样的……

当有人访问我的网站时,他们会点击一个链接,这个链接将把一个网址传递给“recipes.html”……例如,如果他们点击"Ancho智利Sauce",URL将是:

blahblahblah.com/recipes.html?r=Ancho-Chile-Sauce

这个参数实际上是文件夹"Recipes“中的JPEG的名称,当然带有".jpg”扩展名

我需要将此参数放入一个字符串中,并在其前面添加"Recipes/“和在它之后添加".jpg”,然后在html文档中更改图像标记的源,以显示新的动态调用的食谱图像。

我认为我已经做到了这一点,但似乎什么都不起作用。显然,我在Javascript中做错了什么,因为我的标记工作正常,并且传递了带参数的url。

下面是我的代码:

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
<title>Recipes</title>
<link href="mobi-styles.css" rel="stylesheet" />
<script type="text/javascript">
function getParam ( sname )
{
  var params = location.search.substr(location.search.indexOf("?")+1);
  var sval = "";
  params = params.split("&");
    // split param and value into individual pieces
    for (var i=0; i<params.length; i++)
       {
         temp = params[i].split("=");
         if ( [temp[0]] == sname ) { sval = temp[1]; }
       }
  return sval;
}
window.onload = changePic();
var param = getParam("r");
var recipeName = "Recipes/"+param+".jpg";
function changePic() {
document.getElementById("recipe").src=recipeName;
}
</script>
</head>

<body>
<img class"resizer" id="recipe" src="" />
</body>
</html>

请帮帮我!我爱你很久了!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-05-16 06:16:42

卸下()。附加事件时,分配的是函数,而不是函数调用的结果。您所做的是调用changePic(),返回sval,并将sval的值赋给window.onload -这是错误的。

代码语言:javascript
复制
window.onload = changePic;
                         ^---remove ()

window.onload = changePic移到底部这样JSLint就不会生气了。最佳实践是在使用函数之前在顶部声明它们,即使是在有提升时也是如此。

票数 6
EN

Stack Overflow用户

发布于 2012-05-16 06:31:34

我写了一个小脚本,让我在过去访问的url参数,它可以非常有效。它在文件的开头运行,因此您可以随时访问它们。

代码语言:javascript
复制
GET = (function () {
    var get = {
        push:function (key,value){
            var cur = this[key];
            if (cur.isArray){
                this[key].push(value);
            }else {
                this[key] = [];
                this[key].push(cur);
                this[key].push(value);
            }
        }
    },
    search = document.location.search,
    decode = function (s,boo) {
        var a = decodeURIComponent(s.split("+").join(" "));
        return boo? a.replace(/\s+/g,''):a;
    };
    search.replace(/\??(?:([^=]+)=([^&]*)&?)/g, function (a,b,c) {
        if (get[decode(b,true)]){
            get.push(decode(b,true),decode(c));
        }else {
            get[decode(b,true)] = decode(c);
        }
    });
    return get;
})();

现在,您可以访问所需的参数:

代码语言:javascript
复制
blahblahblah.com/recipes.html?r=Ancho-Chile-Sauce

GET['r']; // will print: Ancho-Chile-Sauce

代码语言:javascript
复制
GET.r; 

如果参数重复多次,则将其存储为数组;

代码语言:javascript
复制
example.com/test?name=John&name=Smith

name属性变成一个数组

代码语言:javascript
复制
GET.name[1] ; // Smith

我希望这能帮助你

票数 3
EN

Stack Overflow用户

发布于 2012-05-16 06:13:33

更改此设置:

代码语言:javascript
复制
if ( [temp[0]] == sname ) { sval = temp[1]; }

要这样做:

代码语言:javascript
复制
if ( temp[0] == sname ) { sval = temp[1]; }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10609511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档