gpt4 book ai didi

javascript - Angular http post 向请求添加额外的参数

转载 作者:行者123 更新时间:2023-12-03 12:21:19 25 4
gpt4 key购买 nike

我的指令中有以下内容:

scope.progressCourse = ->
req_data =
course_id: scope.course.id
success: true

$http.post(
"<%= Rails.application.routes.url_helpers.progress_course_path %>",
req_data
).then (succesful_resp) ->
scope.course = succesful_resp.data.data
scope.init_from_course_object()
, (error_resp) ->
show_error(error_resp)

并且,在服务器端,我希望收到 course_id 和 success 参数。不过,我收到了一些额外的东西:

  Parameters: {"course_id"=>1, "success"=>true, "training"=>{"course_id"=>1, "success"=>true}}

该请求发送至名为 TrainingController 的 Controller 。我正在运行 Rails 3.2.13,以及 Angular 1.2.10。有人可以解释为什么会出现额外的哈希 {"training"=>{"course_id"=>1, "success"=>true}}

更新:如果我添加这个:

  $httpProvider.defaults.transformRequest = (data) ->
if data?
return $.param(data)
return data

我将帖子更改为:

  $http(
method: "POST"
url: "<%= Rails.application.routes.url_helpers.progress_course_path %>",
data: req_data,
headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
).then (succesful_resp) ->

然后我只得到我需要的 2 个参数。有人可以解释为什么会出现这种行为吗?

最佳答案

Rails 具有许多内置功能,可以更轻松地处理外部 API。在这种情况下,它有一个params_wrapper,它将操作请求中传入的参数,将它们嵌套在它假设您想要的哈希中。

例如,如果您将 {name: 'foo',age: 12} 提交到 UsersController,它将假定它们应该包含在嵌套的 user 中> 键,它将透明地为您完成此操作。

此包装器的文档位于此处:

http://api.rubyonrails.org/v3.2.13/classes/ActionController/ParamsWrapper.html

代码在这里:

https://github.com/rails/rails/blob/v3.2.13/actionpack/lib/action_controller/metal/params_wrapper.rb

如果您不需要此功能,可以通过注释掉 /config/initializers/wrap_parameters.rb 中的 wrap_parameters format: [:json] 行来禁用它>.

关于javascript - Angular http post 向请求添加额外的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24434728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com