[英]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.