【问题标题】:rails/jquery/ajax: done callback is not executingrails/jquery/ajax:完成回调未执行
【发布时间】:2014-10-25 19:14:53
【问题描述】:

我有一个工作代码,其中不需要返回值的 AJAX 调用可以正常工作。

Javascript(实际上是coffeescript):

$.ajax({
      url: "/images/" + image_id + "/" + action,
      type: "GET",
      dataType: 'json'
    }).done( (response) ->
      alert("hello")
      )

在服务器端我有这个:

respond_to do |format|
  format.js {render nothing: true}
end

一切正常

但是现在我需要返回一个值,所以我把服务器端改成了这样:

respond_to do |format|
      format.json {render :json => @image.quality}
end

这也执行得很好,服务器端和客户端都没有错误 - 但“完成”回调永远不会执行。

我错过了什么?我搜索了很多文档,我对发现的内容感到困惑。官方文档http://www.railscook.com/recipes/rails-view-controller-ajax-response-example/ 说用模板渲染js,但我不需要直接渲染javascript,我只需要客户端的值。

【问题讨论】:

  • 如果您使用浏览器开发工具检查响应,您是否看到任何带有预期 json 的响应?控制台窗口中的任何 JavaScript 错误怎么办?
  • 实际上,当我在控制台部分和响应选项卡中查看 firebug 时,我确实看到了 json 响应!所以看起来响应已经到来了——但是为什么done 不火呢?我应该使用另一个回调吗?
  • 我喜欢$.get 函数,它很短而且对我总是有效,试试看:$.get(url, function(response) { alert("got it!"); }); - 你只需要在调用它之前设置url 变量
  • 在你的情况下也可以尝试success回调,看看它是否会触发。
  • 您的建议都不起作用....尝试了获取快捷方式和成功回调:(

标签: javascript jquery ruby-on-rails ajax


【解决方案1】:

堵住它。

问题在于 JSON 格式错误。

由于某种原因

format.json {render :json => @image.quality}

不会产生有效的 json,实际上,不会产生 done 回调,但错误回调会触发......(从我这边非常糟糕的做法是一开始就没有包含错误回调)

所以如果我把它改成

format.json {render json: @image}

我得到了有效的 json 并且 done 回调触发...

【讨论】:

  • 我应该要求您包含错误回调,我认为您的响应没问题,因为您可以使用 Firebug 验证它。总之很好的学习课程:)
  • 感谢您的支持和帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-20
  • 2016-12-23
  • 2020-04-13
  • 1970-01-01
相关资源
最近更新 更多