Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.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
Javascript 角度http post向请求添加额外的参数_Javascript_Jquery_Ruby On Rails_Angularjs - Fatal编程技术网

Javascript 角度http post向请求添加额外的参数

Javascript 角度http post向请求添加额外的参数,javascript,jquery,ruby-on-rails,angularjs,Javascript,Jquery,Ruby On Rails,Angularjs,我在指令中有以下内容: 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

我在指令中有以下内容:

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)
请求发送给名为TrainingController的控制器。我运行的是Rails 3.2.13和angular 1.2.10。有人能解释一下为什么会出现额外的哈希值
{“training”=>{“course\u 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) ->
$http(
方法:“员额”
url:“”,
数据:请求数据,
标题:{'Content Type':'application/x-www-form-urlencoded;charset=UTF-8'}
).然后(成功)->

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

Rails有很多内置功能,可以使处理外部API变得更容易。在这种情况下,它有一个params_包装器,该包装器将操作请求中传入的参数,并将它们嵌套在它假定需要的哈希中

例如,如果您正在将
{name:'foo',age:12}
提交给UsersController,它将假定它们应该封装在嵌套的
user
键中,并将透明地为您执行此操作

此包装的文档如下所示:

代码如下:


如果您不想要此功能,可以通过注释掉
/config/initializers/wrap_parameters.rb

中的
wrap_参数格式:[:json]
行来禁用它。您是否验证了js代码中是否生成了额外的哈希(例如,通过重命名
req\u data
块中的字段,看看会发生什么情况)?您的DOM中是否有
指定
training[course\u id]
training[success]
字段(这是rails RESTful表单中常见的参数命名约定)?你能在github上发布一个复制这种行为的示例应用程序吗?
  $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) ->