AngularJS $ http.delete在Azure App Service中不起作用

时间:2017-11-03 08:56:05

标签: angularjs azure

我昨天发布的类似问题的后续跟进。我试图从Azure应用程序服务中的表中删除数据。这是我在Angular文件中的功能。

function delName(user) {
 //$scope.categories.push(user);
 alert("about to delete. Action cannot be undone. Continue?")
 $http.delete('https://test-evangelists-1.azurewebsites.net/tables/people', user, config)
   .then(function (res) {
       $scope.getNames();
   });
}

然后我添加了一个HTML按钮:

<button id="btn-del-evangelist" class="btn btn-default btn" ng-click="delName(user);">Delete User</button>

这是我的标头变量的值:

var config = {
    headers: {
        'Access-Control-Allow-Origin':'*',
        'ZUMO-API-VERSION': '2.0.0'
    }
};

但是当我尝试运行它时,控制台会返回以下错误:

enter image description here

表示必须指定ZUMO-API-VERSION的标头。

以下是我的GET和POST代码

获取:

    function getNames() {
      $http.get('https://test-evangelists-1.azurewebsites.net/tables/people', config)
   .then(function (res) {
       console.log(res);
       $scope.people = res.data;
   });
  }

发表

 function addName(user){
     //$scope.categories.push(user);
     alert("about to post!")
     $http.post('https://test-evangelists-1.azurewebsites.net/tables/people', user, config)
       .then(function (res) {
           $scope.getNames();
       });
 }

由于我已经在变量中指定了标题,我想知道这里有什么问题。任何帮助将不胜感激。

更新 我发现在我可以执行删除之前必须将Id附加到URL。但是,我需要运行GET来检索给定参数的ID,但是在获取ID时我仍然遇到错误。

这是我的删除功能

 function delName(user) {

     alert("About to delete. Action cannot be undone. Continue?")
     var retrievedId = "";

     $http.get('https://test-evangelists-1.azurewebsites.net/tables/people', {
         params: { name: user.name, location: user.location },
         headers: { 'Access-Control-Allow-Origin': '*', 'ZUMO-API-VERSION': '2.0.0' }
     })
        .then(function (res) {
            retrievedId = res.id;
            alert(retrievedId);
        });


     $http.delete('https://test-evangelists-1.azurewebsites.net/tables/people/' + retrievedId, config)
       .then(function (res) {
           $scope.getNames();
       });

 }

获取ID时,有没有人知道GET命令有什么问题?

更新2:我编写了一个Web方法(asmx),它将连接到SQL服务器以检索传递所需参数的ID。 ID将以字符串文字形式返回,但采用JSON格式。然后我调用JSON.parse将字符串解析为JSON对象,然后将ID分配给我在URL中附加的变量。 -

在我编写Web方法之后,现在这是我的删除功能。

 function delName(user) {
        var confirmres = confirm("You are about to delete this record. Action cannot be undone. Continue?");
        var retrievedId = "";

        if (confirmres == true) {
            //get the ID via web service
            $http.get('\\angular\\EvangelistsWebService.asmx/GetId', {
                params: { name: user.name, location: user.location },
                headers: { 'Access-Control-Allow-Origin': '*', 'ZUMO-API-VERSION': '2.0.0' },
                dataType: "json",
                contentType: "application/json; charset=utf-8"
            })
               .then(function (res) {
                   $scope.retData = res.data;
                   var obj = JSON.parse($scope.retData);
                   angular.forEach(obj, function (item) {
                       if (item.length == 0)
                           alert('No data found');
                       else {
                           //perform delete after getting the ID and append it to url
                           $http.delete('https://test-evangelists-1.azurewebsites.net/tables/people/' + item.id, config)
                             .then(function (res) {
                                 $scope.getNames();
                             });
                           alert(item.id + ' deleted');
                       }
                   });
               });
        }
    }

这是我学习如何在AngularJS上调用HTTP DELETE的一种方法。但我不知道这是否是最佳的。无论如何,这对我有用,除非有其他建议。

1 个答案:

答案 0 :(得分:1)

delete(url, [config]);只有一个参数(config),而不是两个(data,config)。

Delete API

  

post(url, data, [config]);

VS

Post API

  

/tables/tablename/:id

至于您更新的问题:

要从表格中删除某个项目,会显示正确的网址:

:

请注意ID之前的create or replace trigger trig1 before update of sal on emp for each row when (new.sal < old.sal) declare user_xcep EXCEPTION; PRAGMA EXCEPTION_INIT( user_xcep, -20001 ); begin raise user_xcep; end; /