我在两个网站都使用Angular。 我在控制器中有第一个带有JSON的网站。 我需要把它发送到另一个网站的控制器。
问题:
以下代码工作正常,我不会在JSON中发送特殊字符,如&
,当然会破坏我的网址(当然还有网址长度限制)
破坏我的代码的JSON示例:{"recordedby":"mackee&","year":2016}
如何在不破坏网址的情况下发送&
或/
等特殊字符?
我找了一个解决方案来发送数据作为帖子,但我找不到任何东西。
我现在做什么:
在第一个网站控制器中:
angular.module('site1').controller('site1Controller', ['$scope',
function($scope) {
...
$scope.createEditLink =function(){
var query = encodeURIComponent(JSON.stringify(jsonToSend));
var url = host +"/edit/query="+query;
return url ;
}
...
}
]);
在第一个网站视图中:
<a ng-href="{{createEditLink()}}" target="_blank">
edit
</a>
JSON发送:
{"filtered":{"filter":{"and":[{"or":[{"regexp":{"recordedby":".*mackee*.*"}},{"term":{"recordedby":"mackee*","_cache":false}}]}]}}}
所以点击它打开这个链接:
http://host/edition/query={%22filtered%22:{%22filter%22:{%22and%22:[{%22or%22:[{%22regexp%22:{%22recordedby%22:%22.*mackee*.*%22}},{%22term%22:{%22recordedby%22:%22mackee*%22,%22_cache%22:false}}]}]}}}
在第二个网站的控制器中:
angular.module('site2').controller('site2Controller', ['$scope','$routeParams',
function($scope,$routeParams) {
function myUrlToArray(url) {
var paramsFormatted = {};
var paramstmp = decodeURI(url).split("&");
for (var index = 0; index < paramstmp.length; ++index) {
var tmp = paramstmp[index].split("=");
paramsFormatted[ tmp[0] ] = tmp[1];
}
return paramsFormatted;
}
$scope.urlParams = myUrlToArray($routeParams.params);
var myJson = JSON.parse(decodeURIComponent($scope.urlParams["query"]));
....
}
]);
欢迎任何建议。
答案 0 :(得分:2)
您看到这样的URl的原因是因为它是根据以下编码规则进行编码的:
来源:How to handle special characters in url as parameter values?
此外,&amp;被解释为HTML并且必须是HTML编码的。因此您必须替换&amp;在你的json中使用&
使其正常工作