我想這將是簡單的,因爲我經常使用AJAX來更新通過存在於DOM的實際形式模型,但是試圖發送我遇到了問題,一個JSON對象時試圖讓它工作。發送通過AJAX POST請求JSON對象到Rails的控制器
我知道有很多類似的問題,但似乎沒有什麼具體的JavaScript應該是什麼以及如何請求應該由控制器解析,我嘗試了所有我能想到的變化,但我仍然無法從請求中檢索數據。
JS
var form_data = JSON.stringify(quote);
$.ajax({
url: '/quotes/save_draft',
data: { params: form_data },
type: 'POST',
contentType: 'application/json',
cache: false,
success: function(data) {
},
error: function() {
}
});
對於data
屬性我已經試過
data: { params: form_data },
data: form_data,
data: quote,
Rails的控制器
RAILS_DEFAULT_LOGGER.info params.inspect
RAILS_DEFAULT_LOGGER.info params[:_json].inspect
,但我仍然不能得到的p成功打印原始JSON對象的roperty,例如RAILS_DEFAULT_LOGGER.info params[:_json][:params][:payment_term]
,其中[:params]
是JSON對象的頂級屬性。
RAILS_DEFAULT_LOGGER.info params[:_json][:params][:payment_term]
的輸出看起來像一個url編碼的字符串而不是JSON對象,但如果我嘗試使用JSON.parse(params[:_json])
,我只是得到一個錯誤,它是TypeError (can't convert String into Integer)
。
任何想法?我知道它必須是我上面所說的一些組合,而且我確信我已經嘗試了所有這些,但是我一定沒有,或者我正在嘗試一些完全不相關的東西。
全部控制器
def save_draft
if request.post?
RAILS_DEFAULT_LOGGER.info "\n\n"
RAILS_DEFAULT_LOGGER.info params
RAILS_DEFAULT_LOGGER.info params[:_json]
RAILS_DEFAULT_LOGGER.info params[:_json][:form_data]
RAILS_DEFAULT_LOGGER.info params[:_json][:form_data][:payment_term]
RAILS_DEFAULT_LOGGER.info "\n\n"
render :text => '1'
else
render :text => '0'
end
end
從目前的誤差與RAILS_DEFAULT_LOGGER.info params[:_json][:form_data]
線做的,這是一個沒有方法錯誤,因爲零的對象。
這是RAILS_DEFAULT_LOGGER.info params.inspect
{"action"=>"save_draft", "_json"=>"form_data=%7B%22line_items%22%3A%5B%7B%22contract_term%22%3A12%2C%22product%22%3A%222-Pair+EFM+off-net%22%2C%22site%22%3Anull%2C%22quantity%22%3A1%2C%22setup_cost_each%22%3A1500%2C%22setup_cost%22%3A1500%2C%22rental_cost_each%22%3A240%2C%22rental_cost%22%3A240%2C%22is_ad_hoc%22%3Afalse%2C%22default_setup%22%3A1500%2C%22default_rental%22%3A240%2C%22default_contract%22%3A12%2C%22fixed_initial_cost%22%3Afalse%2C%22price_list_item_id%22%3A194%2C%22info%22%3A%22Provides+up+to+10Mb%2Fs+of+symmetric+Ethernet+connectivity+with+a+6-hour+fix+SLA.%22%7D%5D%2C%22partner_id%22%3A125%2C%22raised_by%22%3A940%2C%22approval_required%22%3A0%2C%22payment_term%22%3A%22Monthly%22%2C%22message%22%3A%22%22%2C%22scope_of_work%22%3A%22%22%2C%22internal_message%22%3A%22%22%2C%22partner_ref%22%3A%22%22%2C%22ccs%22%3A%22%22%2C%22project_requires_coordination%22%3A0%7D", "controller"=>"quotes"}
只需使用簡單的'數據:{form_data:form_data}'。你可以請你發佈你的控制器? –
這只是一個猜測,但試一試:改變'的contentType: '應用程序/ json''到'的contentType: 「應用/ JSON的;字符集= UTF-8」,數據類型: 「JSON」,' – Athar
感謝您的建議,我已經實現了兩者,控制器現在非常簡單,我已經更新了這個問題。 – martincarlin87