【问题标题】:JSON Returned From Rails Server via AJAX fails to run通过 AJAX 从 Rails 服务器返回的 JSON 无法运行
【发布时间】:2013-05-22 22:00:07
【问题描述】:

我有一个简单的 ajax 发布到服务器..

$(".invite-team-members-submit-btn").click(function() {
  $.post("invite_team_member", { 
    token: $("#token").val(), 
    email: $("#email").val(), 
    team: $("#team").val() 
  },"json")
    .done(function (responseText) {
      alert(responseText.response);
    })
    .fail(function (xhr,status,message) { alert("ERROR: " + message); })
    .then(function () { alert("Something should happen."); });
});

返回的 JSON 如下所示...

{"response":"Person has been invited."}

我在控制台中的响应头是这样的......

Response Headers
  Cache-Control max-age=0, private, must-revalidate
  Connection    close
  Content-Type  application/json; charset=utf-8
  Date  Wed, 22 May 2013 21:45:07 GMT
  Etag  "e5b5e12acbcc78372b2a861027b66c05"
  Status    200 OK
  Transfer-Encoding chunked
  X-Request-Id  d835ce021eff7733d67ebfcdd468bdf2
  X-Runtime 0.007909
  x-ua-compatible   IE=Edge

我的控制台不仅告诉我我收到了 200 状态,而且我的响应包括我想要的 JSON。但是,在处理解析的 JSON 时,不会发出警报。请注意,我没有收到任何警报,甚至来自 then 函数。这可能是什么原因造成的?

【问题讨论】:

  • console.log(responseText)console.log(typeof responseText) 由于您正在返回 application/json 内容类型标头,jQuery 可能会为您解析它,然后在 jQuery.parseJSON 上出现错误,因为您正在尝试解析一个对象而不是一个字符串。
  • @KevinB 说了什么;如果您已经返回 JSON,请不要使用 parseJSON
  • 控制台日志中没有返回任何内容。它表现得好像服务器从未被击中,除非控制台在和我开玩笑。

标签: javascript jquery ruby-on-rails ajax json


【解决方案1】:

这很可能是由于 jQuery 在成功回调之前自动为您解析了 json。要使这种情况始终发生,以便您可以始终如一地期待它,请使用以下命令:

$(".invite-team-members-submit-btn").click(function() {
  $.post("invite_team_member", { 
    token: $("#token").val(), 
    email: $("#email").val(), 
    team: $("#team").val() 
  },"json")
    .done(function (responseText) {
      alert(responseText.response);
    })
    .fail(function (xhr,status,message) { alert("ERROR: " + message); })
    .then(function () { alert("Something should happen."); });
});

注意第 2 行末尾的 "json" 参数

更新$.post() 末尾有一个;,使.done.fail.then 无效。在上面的代码中修复。

如果您仍然没有看到完成警报或失败警报,则说明您的控制台中有错误,或者点击事件一开始就没有发生。如果使用 Firefox,请确保您也在使用 firebug。如果在 IE 中测试,请尝试其他浏览器。

【讨论】:

  • 没有这样的运气。我没有收到警报。我发布了您的答案以匹配我的问题以保持最新状态。
  • 查看最新的补充,如果没有done或者fail的提示,说明你的控制台有js错误,或者click事件没有发生,或者ajax被中止了表单提交或页面刷新。
  • 你不应该从这个事件中返回 false 吗?
  • 叹息,我应该仔细检查类名选择器。您最后的评论失败帮助我找到了解决方法。感谢 Explosion Pills 也帮助解决了与此相关的上一个问题。
猜你喜欢
  • 2018-02-03
  • 2012-03-11
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多