角度从网站发送json到另一个

时间:2016-04-27 09:23:40

标签: angularjs json url

我在两个网站都使用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"]));

         ....
    }
]);

欢迎任何建议。

1 个答案:

答案 0 :(得分:2)

您看到这样的URl的原因是因为它是根据以下编码规则进行编码的:

  • 字母数字字符“a”到“z”,“A”到“Z”和“0”到“9”保持不变。
  • 特殊字符“。”,“ - ”,“*”和“_”保持不变。
  • 空格字符“”将转换为加号“+”
  • 所有其他字符都不安全,首先使用某种编码方案将其转换为一个或多个字节。然后表示每个字节 由3个字符的字符串“%xy”,其中xy是两位数 字节的十六进制表示

来源:How to handle special characters in url as parameter values?

此外,&amp;被解释为HTML并且必须是HTML编码的。因此您必须替换&amp;在你的json中使用&amp;使其正常工作