簡體   English   中英

如何在Ajax調用中調用控制器外部的Angularjs控制器函數

[英]How to call Angularjs controller function outside the controller in an Ajax call

我試圖在控制器組件之外調用Angularjs函數,如下所示:

   <script type="text/javascript">
        function saveprof() {
            $('.spinner').show();
            $.ajax({
                type: "POST",
                url: "saveprof",
                enctype: 'multipart/form-data',
                async: true,
                data: {
                    'rinput_Aj': JSON.stringify(angular.element(document.getElementById('rdExampleApp')).scope().$func()),
                    'csrfmiddlewaretoken': $("input[name=csrfmiddlewaretoken]").val()
                },
                success: function (data, textStatus, jqXHR) {
                    $('#message').html(data);
                    window.location.href = 'myprofile';
                    window.location('myprofile');
                    $('.spinner').fadeOut();
                }
            });
        }
</script>

這是angularjs控制器代碼:

 <script>
    var app = angular.module('rdExampleApp', ['ui.rdplot']);
    app.controller('rdPlotCtrl', function ($scope) {
        $scope.dataset = {
         "d0": { "id": 0, "name": "Housing", "value": 18 },
         "d1": { "id": 1, "name": "Travel", "value": 31.08 },
         "d2": { "id": 2, "name": "Restaurant", "value": 64 },
         "d3": { "id": 3, "name": "Bank", "value": 3 },
         "d4": { "id": 4, "name": "Movies", "value": 10 }
          };

          $scope.func = function func() {
                 var jdata = $scope.dataset;
                 return jdata;
            }
    });

   </script>

它會拋出一個錯誤Uncaught TypeError:無法讀取未定義的屬性'$ func'

編輯:建議之后,我將我的jquery ajax調用轉換為Angularjs中的$ http函數..但它什么都沒做..控制台中沒有錯誤:(

這是我如何調用$ http服務函數

   <body ng-controller="rdCtrl">
        <a ng-click="saveprof()">Save</a>  

   <script>
    var app = angular.module('rdExampleApp', ['ui.rdplot']);
    app.controller('rdCtrl', function ($scope) {
        $scope.dataset = {
     "d0": { "id": 0, "name": "Housing", "value": 18 },
     "d1": { "id": 1, "name": "Travel", "value": 31.08 },
     "d2": { "id": 2, "name": "Restaurant", "value": 64 },
     "d3": { "id": 3, "name": "Bank", "value": 3 },
     "d4": { "id": 4, "name": "Movies", "value": 10 }
      };

      $scope.func = function func() {
             var jdata = $scope.dataset;
             return jdata;
        }, function ($scope, $http) {
        $scope.saveprof = function () {
            //show spinner        
            $('.spinner').show();
            $http.post('saveprof', {
                data: { 'data': JSON.stringify($scope.dataset) }
            })
                      .success(function (data) {
                          if (data == "null") {
                              //your code if return data empty 
                          } else {
                              //your code if return data not empty 
                              $('#message').html(data);
                          }
                          //hide spinner
                          $('.spinner').fadeOut();
                      })
                      .error(function (data, status, headers, config) {
                          console.log('error' + status);
                          //hide spinner in case of error
                          $('.spinner').fadeOut();
                      })
        }
    }
    );
</script>
</body>

我錯過了什么?

為了向服務器運行XMLHttpRequest請求,你在angularjs中有很多選項,你不必亂用簡單的javascript並調用角度范圍來獲取變量和函數。 您可以使用$ http或服務(暫時保留)。

我將展示如何使用原始角度的$ http發出請求。

  1. 首先,您必須在控制器的聲明中導入$ http模塊,如下所示:

     var app = angular.module('rdExampleApp', ['ui.rdplot']); app.controller('rdPlotCtrl', function ($scope,$http) {...}); 
  2. 在你控制器中你創建json對象,然后像這樣執行請求:

      //show spinner $('.spinner').show(); $http.post('dal/addEventHalls.php', { data: {'data': $scope.datase} }) .success(function (data) { if (data == "null") { //your code if return data empty } else { //your code if return data not empty } //hide spinner $('.spinner').fadeOut(); }) .error(function (data, status, headers, config) { console.log('error' + status); //hide spinner in case of error $('.spinner').fadeOut(); }) 
  3. 你可以看到我們不使用url參數,但我們將url直接傳遞給post()函數。 data參數用於放置您要發送到服務器的任何數據。

希望有助於好運。

UPDATE

  1. 我個人不用字符串化數據參數。我像json對象一樣傳遞它們
  2. 進入php文件,為了獲取數據,試試這個:

    $ params = json_decode(file_get_contents('php:// input'),true); //從angular factory-service中讀取值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM