我正在使用Heroku和Ruby on Rails應用程序,並從Safari運行。我有以下Ajax調用:「[object Object]」代替實際對象作爲參數傳遞
$.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
爲什麼'dataType:script'? – elclanrs
如果您發送「arr1」作爲參數的*值*,您將獲得該結果。基本上你的設置被打破了。將對象作爲離散參數發送。 – Pointy
js.erb文件在服務器端呈現並作爲響應運行。這已經發生了數百次服務器調用。 –