当我获得带有window.location的URL时,JavaScript执行停止

JavaScript execution stops when I get the URL with window.location

本文关键字:URL JavaScript 执行 location window      更新时间:2023-09-26

作为练习的一部分,我正在构建一个在线商店,当我试图访问当前URL的参数时遇到了问题。我的JavaScript代码是:

var link = getQueryVariable("q");
var minPrice = 0;
var maxPrice = 500;
function getQueryVariable(variable)
    {
           var query = window.location.search.substring(1);
           var vars = query.split("&");
           for (var i=0;i<vars.length;i++) {
                   var pair = vars[i].split("=");
                   if(pair[0] == variable){
                       return pair[1];
                    }
           }
           return(false);
    }
    function setPrices(callback){
        $.get("getPriceBounds.php?q=" + link, function(data){
            var results = JSON.parse(data);
            minPrice = results["min"];
            maxPrice = results["max"];  
            callback();
        },"text/javascript");
    }

我是以错误的方式使用window.location,还是有其他方法可以在不停止执行的情况下访问URL?

感谢

function getParameterByName(name) {
    name = name.replace(/['[]/, "''[").replace(/[']]/, "'']");
    var regex = new RegExp("[''?&]" + name + "=([^&#]*)"),
    results = regex.exec(location.search);
    return results === null ? "" : decodeURIComponent(results[1].replace(/'+/g, " "));
}

请改用此选项。如果您在页面上http://example.org/index.html?q=300并执行:

var q = getParameterByName("q");
console.log(q);

然后300将打印在您的控制台中。

使用window.location.search应该可以很好地工作。

您可以尝试以下方法来获取查询参数,以防代码出现问题。

var q = 'myParam';
var getParams = function(url) {
  return (window.location.search || url).slice(1).split('&')
    .reduce(function(a, b) {
      b = b.split('=');
      a[b[0]] = b[1];
      return a;
    }, {});
}
getParams(); //{}
getParams('?test=7&more=test'); //{test:7, more:'test'}

注意:上面的代码不会在嵌入式snippet runner中运行,因为它没有窗口对象。