2012-10-01 94 views
0

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

+0

爲什麼'dataType:script'? – elclanrs

+0

如果您發送「arr1」作爲參數的*值*,您將獲得該結果。基本上你的設置被打破了。將對象作爲離散參數發送。 – Pointy

+0

js.erb文件在服務器端呈現並作爲響應運行。這已經發生了數百次服務器調用。 –

回答

1
dataType : 'script' 

你確定這會運行

嘗試

dataType : 'json' 

另外請確保您使用json.stringify發送的數據

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

確保您的密鑰包含在引號中

+0

這將起作用。通話只有一次失敗,其他所有時間都成功。 'dataType:'script''是因爲我正在渲染一個js.erb文件作爲響應 - 請參閱http://lathamcity.com/posts/ajaxInRails.html –

+0

除了這一次,調用一直工作。如果這是與你在這個答案中描述的任何事情有關的問題,他們是不是總是工作或從不工作? –

相關問題