AngularJs 1.3 $资源忽略了一些字符

时间:2016-04-20 13:10:30

标签: javascript php angularjs encoding get

我正在维护一个使用旧版AngularJs的项目。我从一开始就没有工作,所以我不能改变它。

问题是:当我使用$ resource访问PHP脚本时,它忽略了一些字符(比如“#”或“\”),所以我认为这是一些urlenconding问题(不确定它) )。请参阅以下代码。

报告/ report.html

<table class="table table-condensed table-bordered table-hover">
        <thead>
            <tr>
                <th>Code</th>
                <th>Date</th>
                <th>Company</th>
                <th>Action</th>
            </tr>
        </thead>
        <tbody>
        <tr data-ng-repeat="info in searchResult as results">
            <td>{{info.code}}</td>
            <td>{{info.date}}</td>
            <td>{{info.company_name}}</td>
            <td class="col-sm-2">
            <button data-ng-click="cancel(info.code,info.password)" data-ng-show="!info.canceled" class="form-control btn-danger">Cancel</button>
            </td>
        </tr>
</tbody>

报告/ controllers.js

define(['reports/module'], function (app) {
'use strict';

    app.controller('reports', function ($scope, $http, $timeout, cancelService,loading, modal) {
        $scope.cancel = function(code, password) {
            $scope.confirm.code = code;
            $scope.confirm.password = password;
            cancelService.query($scope.confirm, function(return) {
                if(return.status) {
                    alert(return.msg);
                    $scope.searchResult = [];
                }
            });
        };
    });
});

报告/ services.js

define(['reports/module', 'ngResource'], function (app) {
    'use strict';

    app.factory('cancelService', function($resource){
        return $resource('api/reports/cancel-online/reservationno/:code/password/:password',{},{'query' : {'isArray': false}});
    });
});

PHP脚本(api / reports / ReportsAPI.class.php)

class ReportsAPI extends Controller {

    //This is a internal method that expects a GET Request using a defined URL
    $restfull = new Restful();
    $restfull->server('GET','api/reports/cancel-online/reservationno/:code/password/:password', function($code, $pass) {
        //do stuff
        //I'm facing the problem here
    }

}

当我使用密码“123#123”作为示例并调试我的PHP时,var $pass的值为“123”并且会破坏我的代码。在调用服务之前执行console.log($scope.confirm.password),我得到了正确的结果,所以看起来像URLenconding有问题。

我尝试了其他一些我在SO(12)中找到的方法但没有成功,我也发现这个issue in GitHub建议改变角度文件,但我没有尝试一下,因为我不知道它将影响哪些软件和平

我该如何解决这个问题?

注意:“密码”只是有问题的var名称,并不是真正的密码,所以在javascript中保持打开或通过GET发送它没有问题。

以下是版本:

  • AngularJS v1.3.0
  • PHP 5.6
  • 在Firefox和Chrome中测试

1 个答案:

答案 0 :(得分:1)

您需要对变量password中的特殊字符进行编码,这可以使用encodeURIComponent()

来实现
  

encodeURIComponent()方法通过将某些字符的每个实例替换为表示字符的UTF-8编码的一个,两个,三个或四个转义序列来编码统一资源标识符(URI)组件(仅将是由两个“代理”字符组成的字符的四个转义序列。

$scope.confirm.password = encodeURIComponent(password);