Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.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的参数_Javascript_Jquery - Fatal编程技术网

Javascript 更改按钮单击时请求的URL的参数

Javascript 更改按钮单击时请求的URL的参数,javascript,jquery,Javascript,Jquery,我为不能提供更多的信息提前道歉,如果这是有限的信息不可能的,我将删除这个问题 所以,我有一个脚本,它生成了一个搜索引擎,它依赖于脚本(也是动态生成的),这个脚本非常复杂,我对它没有任何影响 当您单击apply(search)按钮时,将触发搜索过程,您可以在包含一些参数的新URL上看到结果 E. g.: http://www..example.com/...&ThisParameter=XYZ&SecondParameter=foo&ThirdParameter=bar

我为不能提供更多的信息提前道歉,如果这是有限的信息不可能的,我将删除这个问题

所以,我有一个脚本,它生成了一个搜索引擎,它依赖于脚本(也是动态生成的),这个脚本非常复杂,我对它没有任何影响

当您单击apply(search)按钮时,将触发搜索过程,您可以在包含一些参数的新URL上看到结果

E. g.: http://www..example.com/...&ThisParameter=XYZ&SecondParameter=foo&ThirdParameter=bar
我的问题是-是否可以将
“ThisParameter=XYZ”
更改为其他内容,例如。g<代码>“ThisParameter=Something”

问题是,我不知道URL是如何构造的,我可以影响它,所以我需要一个代码,只需要生成任何URL并更改这一部分

提前感谢您的意见

编辑

我找到了脚本中影响生成URL的部分。当我在DOM中更改它时,它会将我重定向到所需的页面

var options = {"FOO":123,"BAR":"ABC","ThisParameter":"STH","EXAMPLE":123, ...}
这是选择“复制路径”时的输出:


您可以简单地用regex替换,或先按
拆分,然后按
&
拆分,以获得参数值对数组。

如果查询参数的顺序始终相同:

var url = window.location.href;
var lst_temp = url.split('?');
var $lst_parts = lst_temp[1].split('&');

var new_val = 'blabla';
var position = 'x';
lst_parts[x] = 'ThisParameter=' + new_val;

var url_new = lst_temp[0] + '?';
url_new += lst_parts.join('&');
编辑:
如果事先不知道查询键的顺序,请执行以下操作:

从此处使用此功能:

然后读取url并按如下方式拆分:

var url = window.location.href;
var key = "ThisParameter";
var new_val = 'blabla';
var lst_temp = url.split('?');
var lst_parts = lst_temp[1].split('&');   
添加此循环以创建包含查询参数和值的关联数组:

var arr_data = new Array();
for (var index in lst_parts) {
   lst = lst_parts[index].split('=');
   arr_data[lst[0]] = lst[1];
}
要避免无休止的刷新,请执行以下操作:

var val = arr_data[key];
if (val != new_val) {
  arr_data[key] = new_val;
  var  new_url = lst_temp[0] + '?' + EncodeQueryData(arr_data);
  window.location.href = new_url;
}

如果您的问题是如何使用JavaScript动态更改浏览器中的URL,那么这是不可能的(出于安全原因)。 如果您只需要使用然后更改URL来请求页面,您可以使用之前评论中的方法,然后:
窗口。位置。替换(yourModifiedUrl)

如果不重新加载页面,您将无法更改url,但以下内容将允许您进行调整。它采用当前页面的url(来源解释不清楚)。如果您引用的url位于链接的href中,则可以简单地修改此代码

/* get current url info using location object*/
var baseUrl = location.href.split('?')[0];
/* array of search strings */
var searchParams = location.search.slice(1).split('&');
var searchKeyToChange = 'ThisParameter';
var newVal = 'someNewValue';

var doPageReload = false;
/* loop over search strings, modify appropriate one*/
for (i = 0; i < searchParams.length; i++) {
    var params = searchParams[i].split('=');
    if (params[0] == searchKeyToChange) {
        if (params[1] != newVal) {
            searchParams[i] == searchKeyToChange + '=' + newVal;
            doPageReload = true;
        }
    }
} /* load adjusted url if new value not already set*/
if (doPageReload) {
    location = baseUrl + '?' + searchParams.join('&');
}
/*使用位置对象获取当前url信息*/
var baseUrl=location.href.split(“?”)[0];
/*搜索字符串数组*/
var searchParams=location.search.slice(1).split('&');
var searchKeyToChange='ThisParameter';
var newVal='someNewValue';
var dopagerolad=false;
/*循环搜索字符串,修改相应的字符串*/
对于(i=0;i
您是否可以输入您用来生成此URL的代码。没有完整的代码,我们看不到如何帮助这就是问题所在,脚本太大了,我无法将其粘贴到这里,也不知道URL是如何生成的。这就是为什么我说我需要一个解决方案,它只需要获取URL并更改此参数,当然,如果可能的话。是的,这是可能的。。您能访问保存参数的变量吗?如果是这样,那么可以使用正则表达式替换参数“访问保存参数的变量”是什么意思?我知道那里会输出什么(总是一样的),也知道我想要什么(总是一样的)。所以我不需要任何文本作为参数进行动态加载,如果这是你的意思的话?它会自动更改,但此参数始终是固定的。@take2:您是对的。在lst_零件上添加一个循环,创建一个带有查询参数和值的关联数组,然后使用此解决方案:这很接近,但第7行的x未定义。@Asad:yes。不幸的是,如果x不总是在同一个位置,那么它就不起作用了。这是一个通过友好方式加载URL的解决方案吗?因为在那段代码中,我不知道应该在哪里添加新参数(将“preparameter”更改为“postparameter”)。我已经尝试过了,但现在我得到了无休止的页面刷新。我已经把脚本放在了提交按钮所在的页面上(它必须是这样的)。提交按钮所在页面的URL为“正常”,没有参数或任何类似内容。啊,是的,无休止的刷新..有意义。如果使用脚本,则需要在加载页面之前找到并修改url的方法。没有足够的细节来做这件事。另一种方法是在服务器上执行。如果新值不等于旧值,您可以通过仅设置位置来避免无休止的刷新。我对代码进行了调整,条件是仅在值尚未设置时重新加载。感谢您的努力,代码看起来不错,控制台中没有错误,但在这种情况下它不会更改参数。我将在其他页面上尝试一些搜索功能,看看它是否在那里工作。可能与第一个脚本有冲突。
var val = arr_data[key];
if (val != new_val) {
  arr_data[key] = new_val;
  var  new_url = lst_temp[0] + '?' + EncodeQueryData(arr_data);
  window.location.href = new_url;
}
/* get current url info using location object*/
var baseUrl = location.href.split('?')[0];
/* array of search strings */
var searchParams = location.search.slice(1).split('&');
var searchKeyToChange = 'ThisParameter';
var newVal = 'someNewValue';

var doPageReload = false;
/* loop over search strings, modify appropriate one*/
for (i = 0; i < searchParams.length; i++) {
    var params = searchParams[i].split('=');
    if (params[0] == searchKeyToChange) {
        if (params[1] != newVal) {
            searchParams[i] == searchKeyToChange + '=' + newVal;
            doPageReload = true;
        }
    }
} /* load adjusted url if new value not already set*/
if (doPageReload) {
    location = baseUrl + '?' + searchParams.join('&');
}