我在一个名为search1.html的页面中有一个表单,当表单点击提交时,它调用Java脚本上的一个函数,然后这个Java脚本生成一个带有表单输入的Json字符串。然后它应该重新加载相同的页面search1.html传递Json字符串作为参数但它没有传递参数。这是我的代码:
var $keyword = $('#keyword').val();
var $searchString = '';
$searchString = encodeURI('searchString={"keyword": "' + $keyword + '"}');
$newUrl="http://domain/search1.html?"+$searchString;
console.log($newUrl);
this.location = $newUrl;
例如,如果关键字是console.log中的“pizza”,我会得到正确的输出:
domain/search1.html?searchString={%22keyword%22:%20%22pizza%22}
在firefox中加载没有参数的页面:domain/search1.html
在Chrome中,它在domain/search1.html?
?
如果我更改此行:
$newUrl="domain/search1.html?"+$searchString;
其他任何事情,例如:
$newUrl="domain/anything.html?"+$searchString;
它确实很好用..
任何人都知道为什么会发生这种情况?
答案 0 :(得分:0)
您正在处理的主要问题是在传递查询参数时无法对等号进行编码。我建议的解决方案是构建一个json对象,而不是编码查询参数:
var json = {'keyword':$('#keyword').val()};
window.location.href = "http://domain/search1.html?searchString="+JSON.stringify(json);
概念证明
<button onclick='submit()'>Submit</button>
<script>
function submit() {
var json = {'keyword':'stackoverflow'};
window.open("?searchString="+JSON.stringify(json));
}
</script>