为什么这个 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
}
}
);
使用 $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.
我的 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
}
}
);
使用 $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.