当前位置: 首页 > 面试题库 >

jQuery ajax:即使响应正常,也会运行错误200

夹谷硕
2023-03-14
问题内容

我有一个表单,它通过: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



 类似资料:
  • 问题内容: 尝试运行gradle时,出现以下错误: 但是,当我检查JAVA_HOME变量时,我得到: 我的JAVA_HOME是在.bashrc中定义的,我已经仔细检查过它是否已设置为源。 运行还确认JAVA_HOME设置正确并且在PATH上。 我还检查了符号连接这反过来又正确的符号链接 另外,我检查了或中没有重复的JAVA_HOME定义。 所以我的问题是Gradle如何/为什么找到,更重要的是如何

  • 问题内容: 我正在编写一个(貌似)简单明了的SQL代码段,该代码段在确保该列存在之后将其删除。 问题:如果列不存在,代码 内 IF子句抱怨说,它无法找到列!好了, 卫生署 ,这就是为什么它的IF子句中! 所以我的问题是,为什么不应该执行的一段代码会出现错误? 这是代码段: …这是错误: 我正在使用Microsoft SQL Server 2005 Express Edition。 问题答案: IF

  • 问题内容: 我正在运行一个简单的Calculator应用程序来学习Java的异常处理。我设置了两个要处理的异常:InputMismatchException和ArithmeticException,用于除以零。 ArithmeticException得到处理,并且do-while循环继续。但是在捕获InputMismatchException之后,执行将终止而不是继续循环。 码: 输出: 预期:在

  • 问题内容: 我有一个带有IF-ELSE块的SQL代码。IF部分中的代码不应该到达,但是在执行SQL时仍然出现错误。在我首先测试链接服务器的代码中,当它失败时,将其设置为1,并且该块应执行并避免需要查询链接服务器的块中的代码,但是出现此错误: 我正在SSMS 2012中运行查询。为什么会发生此错误? -下列插入SQL语句导致错误 问题答案: 在执行之前,它仍然会解析并绑定所有内容。它没有绑定到这里。

  • 问题内容: 即使我单击常规的“运行”按钮,Eclipse始终以调试模式启动我的应用程序。 有任何想法吗? 问题答案: 我发现必须重新启动Xoom才能使其再次正常运行。

  • 问题内容: 即使执行catch块并抛出第二个Exception,也会在此代码中进行设置? 问题答案: 是的,finally块始终运行…除非以下情况: 运行try-catch-finally块的线程被杀死或中断 你用 基础虚拟机以其他方式被破坏 基础硬件在某种程度上无法使用 另外,如果您的finally块中的方法抛出未捕获的异常,则此后将不执行任何操作(即,该异常将像在其他任何代码中一样被引发)。发