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