【问题标题】:Using Angular $http.delete causing a TypeError使用 Angular $http.delete 导致 TypeError
【发布时间】:2016-05-14 11:00:57
【问题描述】:

我正在尝试使用 $http.delete 发送 DELETE 命令,但出现错误:

TypeError --> Cannot create property 'method' on string 'user_id=5&response=This+is+a+test.'

当我在控制器中执行如下命令时:

在控制器中:

.controller(myController', function($scope) {

    var something = {
      user_id: 1,
      text: 'This is a test.'
    }

     MyFactory.deleteSomething(something);
});

在服务中:

.factory('MyFactory', function($http) {

var service = {};

service.deleteSomething = function(something) {

var data = $.param(something);
var promise =  $http.delete('http://example.com/myapp.php?',
data, {
  headers: {
    'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8'
  }
})
  .success(function(data,status) {
    console.log("Delete success!");
    return data;
  })
  .error(function(data, status, header, config) {
    console.log("Delete FAILED!");
  });
return promise;
   }
return service;
});

我在这里错过了什么?

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    第二个参数delete()期望是一个带有http请求配置的对象。不是你传递的字符串data:

    $http.delete('http://example.com/myapp.php?', data, { [...]

    【讨论】:

    • 这不是var data = $.param(something); 的用途吗?只是通过this answer on SO。
    • 正如您在自己的错误消息中看到的那样,$.param(something) 正在返回一个包含基于对象 'user_id=5&response=This+is+a+test.' 的查询参数的字符串,您可能想要与此相反的东西。
    • 这解决了它:将var data = $.param(something);更改为var data = {params: something};
    猜你喜欢
    • 2015-11-13
    • 2019-02-14
    • 2017-03-08
    • 2021-09-16
    • 2011-04-26
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 2015-08-10
    相关资源
    最近更新 更多