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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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重新加载参数值变化的页面_Javascript_Url_Query String_Url Parameters_Url Parsing - Fatal编程技术网

当参数没有特定顺序时,Javascript重新加载参数值变化的页面

当参数没有特定顺序时,Javascript重新加载参数值变化的页面,javascript,url,query-string,url-parameters,url-parsing,Javascript,Url,Query String,Url Parameters,Url Parsing,我需要在更新参数值后重新加载页面位置,如果参数总是按特定顺序排列,这并不困难,但事实并非如此 因此,如果有一个设置模式,我可以通过正则表达式匹配将它们作为目标,例如URL: 我的目标是这样的: window.location.replace( window.location.href.replace( sf_id=\d+&\d+\.survey=form&variation=, 'sf_id=460&460.survey=form&variation=25002

我需要在更新参数值后重新加载页面位置,如果参数总是按特定顺序排列,这并不困难,但事实并非如此

因此,如果有一个设置模式,我可以通过正则表达式匹配将它们作为目标,例如URL:

我的目标是这样的:

window.location.replace( window.location.href.replace( sf_id=\d+&\d+\.survey=form&variation=, 'sf_id=460&460.survey=form&variation=25002_2' ) );
但是现在参数出现是随机的,所以这些都是有效的URL:

http://www.example.html?15041.survey=form&sf_id=15040&variation=25002_1
http://www.example.html?variation=25002_1&sf_id=15040&15041.survey=form
http://www.example.html?param1=value1&variation=25002_1&sf_id=15040&param2=value2&15041.survey=form
我知道我仍然可以更正if/else if语句,但我认为这不是正确的方法,因为没有特定的模式

感谢您的帮助!谢谢。

基于,我将使用以下代码获取所有查询参数的数组:

var qs = (function(a) {
    if (a == "") return {};
    var b = {};
    for (var i = 0; i < a.length; ++i)
    {
        var p=a[i].split('=', 2);
        if (p.length == 1)
            b[p[0]] = "";
        else
            b[p[0]] = decodeURIComponent(p[1].replace(/\+/g, " "));
    }
    return b;
})(window.location.search.substr(1).split('&'));

我会带你去跑道。之后,您可以进行各种对象到对象的比较,以检查它们是否匹配。

因此,我的主要挑战是针对一个参数,如:15041.survey=form,其中我需要将“15041”更改为“460”,以便新url具有460.survey=form。示例初始URL:和新URL为:
function replaceParamKey(qsObj, oldKey, newKey) {
    qsObj[newKey] = qsObj[oldKey];
    delete qsObj[oldKey];
}

function constructQueryString(qsObj) {
    var qsString = "?",
        c = 0;
    for (var param in qsObj) {
        if (c) qsString += "&";
        qsString += encodeURIComponent(param);
        if (qsObj[param] !== "") qsString += ("=" + encodeURIComponent(qsObj[param]));
        c++;
    }

    return qsString;
}

console.info(qs); // Object {15041.survey: "form", sf_id: 15040, variation: "25002_1"}
replaceParamKey(qs, "15041.survey", "460.survey");
console.info(constructQueryString(qs)); // ?sf_id=15040&variation=25002_1&460.survey=form