我有一个表单,它通过:remote => true通过AJAX提交表单。查看服务器日志和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 ---------
我做了一些更改,现在看来我的错误是解析错误。我不明白,因为这是我从服务器(data.responseText)取回的JSON,这似乎很好:
{"email":"zxxczxc@test.com"}
回答---------当我在表单选项中放入:’data- type’=>:json时,我设法使所有工作正常。我之前尝试过此方法,但由于我将其放在form_tag选项而不是html选项中而无法使用…
如果服务器返回的无效JSON内容(例如单个空格),则jQuery将生成一个解析错误,并将其视为失败请求,即使状态码为200。
从jQuery 1.9开始,当类型设置为JSON时,完全空响应将被视为失败请求,因为空字符串是无效JSON。参见http://jquery.com/upgrade- guide/1.9/#jquery-ajax-returning-a-json-result-of-an-empty- string。