我想构建一个自定义ajax表单(对使用Rails开箱即用的解决方案不感兴趣):
$('form.ajaxForm').submit(function(e){
e.preventDefault();
var $form = $(this),
formValues = getFormValues($form),
formUrl = $form.attr('action');
$.post(formUrl, {
data : formValues,
contentType: "application/json",
success : function(data, textStatus, jqXHR){
// do success here
}
});
});
var getFormValues = function($form){
var values = {};
var valuesArray = $form.serializeArray();
for(var i = 0, max = valuesArray.length; i < max; i++){
var value = valuesArray[i];
values[value.name] = value.value
};
return values;
};
我确实想使用Rails 3的能力,当它接收到json请求时做出不同的响应,例如:
def create
@registration = Registration.new(params[:registration])
respond_to do |format|
format.html { render action: "new" }
format.json { render json: @registration.errors, status: :unprocessable_entity }
end
end
由于某些原因,Rails不能在post期间处理我的请求,并且不响应json。什么在http头告诉它响应json,什么是正确的方式来发布这些数据?
在查看Rails API文档时,我发现了这个花语:
Rails从HTTP Accept决定所需的响应格式客户端提交的报头。
jQuery的$.ajax
调用有一个accepts
设置,可以用来设置这个头的值,但我相信使用dataType
会自动为你配置这个