在AngularJS Framework范围内的页面加载时调用webservice

时间:2015-05-12 13:45:18

标签: javascript html ajax angularjs web-services

我有一个返回Jsonobject的web服务,我在这里使用Ajax在JS中调用它:

$scope.init = function () {
                $.ajax({
                    type: 'GET',
                    timeout: 1000000000,
                    url: serverName.replace('services', 'servicesV2') + '/getTreasuryResults',
                    data: { data: 'None' }, // the data in form-encoded format, ie as it would appear on a querystring
                    dataType: "text", // the data type we want back, so text.  The data will come wrapped in xml
                    success: function (data) {
                        var dataAngularTreasury = JSON.parse(data);
                        alert(dataAngularTreasury);
                        //FillDefaultTreasuryValues(data.split(";"));
                        CallTreasuryDetailValuesWS(934);
                    },
                    error: function (data) {
                        alert(errServiceCall); // show the string that was returned, this will be the data inside the xml wrapper
                        $('#loading').hide();
                    }
                });
            };

如果我在ng-click中调用init()函数,如

<button id="btnGetDefaultValues" type="button" class="button" ng-click="init()">Fill</button>

它运行没有问题。

但如果我在页面加载中调用此web服务,如

angular.module('termDeposite', []).controller('userCtrl', function ($scope) {

    $scope.treasuryValues = [];


    angular.element(document).ready(function () {
        $.ajax({
            type: 'GET',
            timeout: 1000000000,
            url: serverName.replace('services', 'servicesV2') + '/getTreasuryResults',
            data: { data: 'None' }, // the data in form-encoded format, ie as it would appear on a querystring
            dataType: "text", // the data type we want back, so text.  The data will come wrapped in xml
            success: function (data) {
                var dataAngularTreasury = JSON.parse(data);
                alert(dataAngularTreasury);
                //FillDefaultTreasuryValues(data.split(";"));
                CallTreasuryDetailValuesWS(934);
            },
            error: function (data) {
                alert(errServiceCall); // show the string that was returned, this will be the data inside the xml wrapper
                $('#loading').hide();
            }
        });
    });
});

如果我在ng-init触发器中调用此web服务,如

<body id="body" ng-app="termDeposite" ng-controller="userCtrl" ng-init="init()"  >

webservice进入错误步骤并抛出该错误:

  

&#34; \ n \ n \ n错误404 - 不是   找到\ n \ n \ n \ n \ n \ n

错误404 - 不是   发现

\ n \ n \ n

来自RFC   2068 超文本传输​​协议 -   HTTP / 1.1

\ n10.4.5 404 Not Found \ n

服务器未找到任何匹配的内容   Request-URI中。没有说明条件是否是   暂时的或永久的。

如果服务器不希望这样做   客户可用信息,状态码403(禁止)   可以用来代替。如果是,应该使用410(Gone)状态代码   服务器通过一些内部可配置的机制知道一个   旧资源永久不可用且无转发   。地址

\ n \ n \ n \ n \ n \ n&#34;

最后,我可以使用ng-click调用web服务,但我无法使用ng-init或pageload调用相同的web服务。那么如何在页面框架范围内使用页面初始化中的ajax或页面加载来调用web服务?

1 个答案:

答案 0 :(得分:2)

假设您将serverName作为全局并且它是可读的,那么ng-init版本或创建自定义指令并将代码粘贴在链接函数中应该有效。

检查Chrome开发工具(内置为chrome)中网络标签中实际调用的网址 - 在PC上的Mac f12上为cmd + alt + j。