0

我将 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

4

1 回答 1

1
dataType : 'script'

你确定这会工作..

尝试

dataType : 'json'

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

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

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

于 2012-10-01T03:36:45.940 回答