我有一个通过 AJAX 提交表单的表单:remote => true。查看服务器日志和 FireBug,我得到响应 200 OK,它以以下形式返回 JSON:
{ "email": "test@test.com"}
然后我有这两个处理程序:
$('#new_invitation').bind("ajax:success", function(event, data, status, xhr) {
alert('test');
});
$('#new_invitation').bind("ajax:error", function() {
alert('error');
});
即使我得到一个 200OK,它也是触发的错误处理程序。我唯一一次设法使成功处理程序工作是当我发送一个标头中包含 200 的空响应时。
我不知道为什么这不起作用:-S
编辑 1------------ 进行这些更改后:
$('#new_invitation').bind("ajaxSuccess", function(event, data, status, xhr) {
alert('test');
});
$('#new_invitation').bind("ajaxError", function(jqXHR, textStatus, errorThrown) {
alert('error');
console.log(jqXHR.responseText);
console.log(textStatus.responseText);
console.log(errorThrown.responseText);
});
我仍然遇到同样的错误。日志内容给了我:
undefined
my_email@test.com
undefined
这是表单的代码(标准 Rails 的东西):
<%= form_for @shoot.invitations.new, :url=>shoot_invitations_path(@shoot), :remote => true, :html => {:class => 'form-inline'} do |f| %>
<%= f.text_field :email, :'placeholder' => 'ex: test@test.com' %>
<%= f.text_field :role, :'placeholder' => 'ex: Photographer' %>
<%= f.submit "Invite", :class => 'btn btn-success' %>
<% end %>
编辑 2 ---------
我做了一些更改,现在看来我的错误是解析错误。我不明白,因为这是我从服务器返回的 JSON(data.responseText),看起来一切都很好:
{"email":"zxxczxc@test.com"}
回答 --------- 当我将 :'data-type' => :json 放入表单选项时,我设法让一切正常。我之前尝试过,但没有成功,因为我把它放在 form_tag 选项而不是 html 选项中......