为什么这个有角度的$ http.put参数不会被传递?

时间:2016-05-24 13:42:51

标签: angularjs angularjs-factory angularjs-http

我在angularjs app中面临一个非常奇怪的案例。在工厂中,以下代码正常工作:

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

显然连接到api以执行PUT操作(它被称为"删除"这里它实际上只更新记录中的标志)。

但是,当以这种方式编写时,相同的代码不起作用:

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

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

2 个答案:

答案 0 :(得分:2)

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

你可以尝试:

config

https://docs.angularjs.org/api/ng/service/ $ HTTP#放

答案 1 :(得分:1)

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

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

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

我发现这种稍微不同的API让各种“快捷方式”方法足够混乱,我几乎认为最好完全避免它们。您可以看到与the documentation的区别,其中get和delete有两个参数:

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

并且大多数其他快捷方法都有三个:

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

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

  

params - {Object。} - 字符串或对象的映射   将使用paramSerializer序列化并作为GET附加   参数。