this.location没有传递json参数

时间:2015-11-19 02:37:30

标签: javascript jquery html json

我在一个名为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;

它确实很好用..

任何人都知道为什么会发生这种情况?

1 个答案:

答案 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>