Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 为什么$http.put参数赢了';你没通过吗?_Angularjs_Angularjs Factory_Angularjs Http - Fatal编程技术网

Angularjs 为什么$http.put参数赢了';你没通过吗?

Angularjs 为什么$http.put参数赢了';你没通过吗?,angularjs,angularjs-factory,angularjs-http,Angularjs,Angularjs Factory,Angularjs Http,我在angularjs应用程序中面临一个非常奇怪的案例。在工厂中,以下代码正常工作: $http.put(apiBase + 'delete?id='+orderId); 它显然连接到api以执行PUT操作(此处称为“删除”,但实际上只更新记录中的标志) 但同样的代码,如果以这种方式编写,则不起作用: $http.put(apiBase + 'delete', { params: { id: orderId } } ); 这很有趣,因为我在其他一些工厂中使用了

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

$http.put(apiBase + 'delete?id='+orderId);
它显然连接到api以执行PUT操作(此处称为“删除”,但实际上只更新记录中的标志)

但同样的代码,如果以这种方式编写,则不起作用:

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

这很有趣,因为我在其他一些工厂中使用了完全相同的语法来实现类似的API,而且它们可以工作

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

你可以试试:

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

$http#put

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

$http.put(apiBase + 'delete', { id: orderId });
您的其他工厂可能使用问题中所述的语法,因为您正在发出$http.get或$http.delete请求

我发现,对于不同的“快捷方式”方法,这个稍有不同的API非常混乱,我几乎认为最好完全避免它们。您可以看到get和delete有两个参数的区别:

get(url, [config]);
delete(url, [config]);
大多数其他快捷方式有三种:

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

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


虽然这会起作用,但在“数据”属性(进入请求正文)中包含PUT请求的有效负载比在配置对象的“参数”属性(生成查询字符串参数)中包含PUT请求的有效负载更为惯用。我意识到你只是在构建OP已经在使用的代码,这更像是“供参考”