传递“[object Object]”而不是实际对象作为参数

时间:2012-10-01 03:34:33

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

我正在使用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

1 个答案:

答案 0 :(得分:1)

dataType : 'script'

你确定这会有效吗?

尝试

dataType : 'json'

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

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

确保您的密钥包含在引号