我正在使用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
答案 0 :(得分:1)
dataType : 'script'
你确定这会有效吗?
尝试
dataType : 'json'
还要确保对发送的数据使用json.stringify
data : {"stuff" : JSON.stringify(arr1)},
确保您的密钥包含在引号
中