Javascript url重定向:这段代码有问题吗?

时间:2013-03-19 09:49:29

标签: javascript jquery

也许你可以发现我不能发现的东西:

这是我的代码

if(jQuery.urlParam('returnview')) {     
    var ret = jQuery.urlParam('returnview');
    var iid = jQuery.urlParam('iid'); 
    window.location = 'index.php?option=mycomponent&view='+ret+'&Itemid='+iid+'&lang=en';
} else  if(!jQuery.urlParam('returnview')){
  window.location = 'index.php?option=mycomponent&view=myview&Itemid=380&lang=en&sent=1'; 
} else {
  alert('something is dodge');
}

这是功能:

jQuery.urlParam = function(name){
   var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
   return results[1] || 0;
}

现在,如果我的'from'网址中定义了'returnview',它就可以了。 但是,如果没有定义返回视图,它应该转到第二种情况,或者即使失败,也要发出警报。

任何人都可以看到任何明显我在这里做错的事吗?

谢谢

雅克

3 个答案:

答案 0 :(得分:2)

你的第三个条件永远不会受到影响,因为你正在测试真假,所以让我们删除它,留下你:

if(jQuery.urlParam('returnview')) {     
    var ret = jQuery.urlParam('returnview');
    var iid = jQuery.urlParam('iid'); 
    window.location = 'index.php?option=mycomponent&view='+ret+'&Itemid='+iid+'&lang=en';
} else{
  window.location = 'index.php?option=mycomponent&view=myview&Itemid=380&lang=en&sent=1'; 
} 

然后让我们将vars移到ifs之外并特别检查false(如果返回的值等于false,这需要更新你原来的函数,我们在下面做):

var ret = jQuery.urlParam('returnview');
var iid;

if(ret === false) {     
   window.location = 'index.php?option=mycomponent&view=myview&Itemid=380&lang=en&sent=1'; 
} else{
  iid = jQuery.urlParam('iid'); 
  window.location = 'index.php?option=mycomponent&view='+ret+'&Itemid='+iid+'&lang=en';  
} 

...最后让我们修复你原来的功能:

jQuery.urlParam = function(name){
   var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
   return (results && results[0] ? results[0] : false);
}

我没有测试过,但我认为应该解决它

答案 1 :(得分:1)

检查jQuery.urlParam('returnview')下的内容 我很确定如果未设置值,您将获得undefined

尝试jQuery.urlParam('returnview') === undefined

另请查看此帖子:Get escaped URL parameter

答案 2 :(得分:0)

只需根据函数是否返回真值来有条件地设置url参数:

var ret = jQuery.urlParam('returnview');
var iid = jQuery.urlParam('iid');

var view = ret || "myview";
var id = iid || "380";

window.location = 'index.php?option=mycomponent&view='+
                   view + '&Itemid=' + id + '&lang=en';

对于urlParam功能,您需要确保仅捕获参数本身,而不是整个"&abc=xyz"段。您只需在所需部分周围添加括号以捕获它,然后进行第二次匹配(第一个索引)。在取消引用匹配数组之前,请检查它是否为空:

jQuery.urlParam = function(name){
    var re = RegExp('[\\?&]' + name + '=([^&#]*)');
    var results = window.location.href.match(re);
    return results ? results[1] : null;
}