簡體   English   中英

通過AJAX POST請求將JSON對象發送到Rails Controller

[英]Sending a JSON Object via AJAX POST Request to Rails Controller

我認為這很簡單,因為我經常使用AJAX通過DOM中存在的實際形式來更新模型,但是當嘗試發送JSON對象時,嘗試使其工作卻遇到了問題。

我知道有很多類似的問題,但是就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_DEFAULT_LOGGER.info params.inspect
RAILS_DEFAULT_LOGGER.info params[:_json].inspect

但是我仍然無法獲得原始JSON對象的屬性以成功打印,例如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"}

嘗試這個

$.ajax({
    url: '/quotes/save_draft',
    data: quote,
    type: 'POST',
    cache: false,
    success: function(data) {
      #your call 
    },
    error: function() {
      #show error
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM