【问题标题】:"[object Object]" passed instead of the actual object as parameter“[object Object]”作为参数传递而不是实际对象
【发布时间】:2012-09-21 22:40:45
【问题描述】:

我将 Heroku 与 Ruby on Rails 应用程序一起使用,并从 Safari 运行。我有以下 Ajax 调用:

$.ajax({
    type : 'POST',
    url : '/test_page',
    data : {stuff: arr1},
    dataType : 'script'
});

arr1 应该是一个对象数组。在那之前有一个console.log,它是:

[Object, Object, Object, Object, Object, ...]

但是,当我进行此 ajax 调用时,服务器端出现错误。日志显示

2012-10-01T03:13:34+00:00 app[web.1]: Parameters: {"stuff"=>"[object Object]"}
2012-10-01T03:13:34+00:00 app[web.1]: WARNING: Can't verify CSRF token authenticity
2012-10-01T03:13:34+00:00 app[web.1]: NoMethodError (undefined method `to_hash' for "[object Object]":String):
2012-10-01T03:13:34+00:00 app[web.1]: Completed 500 Internal Server Error in 1ms

我无法复制该错误 - 从那以后我每次尝试它时,它都运行良好,并且之前一直运行良好(无论如何)。这个电话甚至和我打了几十次的电话完全相同,因为它是我的测试用例之一,所以它与更改发送的数据没有任何关系。我真的很困惑——什么会导致该字符串有时被传递给服务器而不是对象?

我认为这可能与“无法验证 CSRF 令牌真实性”行有关,因为其他成功请求的日志中没有显示。

对于那些想知道dataType: 'script' 的人,它在那里是因为响应是一个渲染的 js.erb 文件 - 请参阅http://lathamcity.com/posts/ajaxInRails.html

【问题讨论】:

  • 如果你发送“arr1”作为参数的,你会得到它。基本上你的设置坏了。将对象作为离散参数发送。
  • 一个 js.erb 文件在服务器端呈现并作为响应运行。这已经存在数百个服务器调用。
  • 尖尖的,你是什么意思?我发送的是arr1,而不是"arr1"

标签: javascript ruby-on-rails ajax http heroku


【解决方案1】:
dataType : 'script'

你确定这会起作用吗..

试试

dataType : 'json'

还要确保对发送的数据使用 json.stringify

data : {"stuff" : JSON.stringify(arr1)},

确保您的密钥包含在引号中

【讨论】:

  • 这行得通。呼叫只失败了一次,其他所有时间都成功了。 dataType : 'script' 是因为我正在渲染一个 js.erb 文件作为响应 - 请参阅 lathamcity.com/posts/ajaxInRails.html
  • 除这一次外,呼叫一直在正常工作。如果这是与您在此答案中描述的任何问题相关的问题,它们不是总是有效还是永远无效?
猜你喜欢
  • 2014-12-11
  • 2022-01-02
  • 2022-10-21
  • 1970-01-01
  • 1970-01-01
  • 2021-05-14
  • 1970-01-01
  • 1970-01-01
  • 2020-08-11
相关资源
最近更新 更多