为什么这个 angular $http.put 参数不会被传递?

Why this angular $http.put parameter won't get passed?

我的 angularjs 应用程序遇到了一个非常奇怪的情况。在工厂中,以下代码可以正常工作:

$http.put(apiBase + 'delete?id='+orderId);

这显然连接到一个api来执行PUT操作(这里称为"delete"但它实际上只更新记录中的一个标志)。

但是同样的代码,当这样写的时候,是行不通的:

$http.put(apiBase + 'delete', {
    params: {
      id: orderId
    }
  }
);

这很有趣,因为我在其他一些工厂中使用完全相同的语法来访问类似的 API,并且它们有效!

我认为这是因为 $http.put() 的第二个参数是 data 对象,而不是 config 对象。您正在传递一个 config 对象作为第二个参数。

你可以试试:

$http.put(apiBase + 'delete', null, {
    params: {
      id: orderId
    }
  }
);

https://docs.angularjs.org/api/ng/service/$http#put

使用 $http.put 时,您不需要将数据包装在配置对象中。可以直接传数据对象,然后省略第三个参数:

$http.put(apiBase + 'delete', { id: orderId });

您的其他工厂可能使用您问题中所述的语法,因为您正在发出 $http.get 或 $http.delete 请求。

我发现,对于各种 "shortcut" 方法,这种略有不同的 API 足以令人困惑,以至于我几乎认为最好完全避免使用它们。您可以从 the documentation 中看到差异,其中 get 和 delete 有两个参数:

get(url, [config]);
delete(url, [config]);

其他大多数快捷方式有以下三种:

post(url, data, [config]);
put(url, data, [config]);

请注意,[config] 对象在该文档页面上进一步定义,它定义了 "params" 属性:

params – {Object.} – Map of strings or objects which will be serialized with the paramSerializer and appended as GET parameters.