gpt4 book ai didi

jquery - Coffeescript 不处理 ajax :success

转载 作者:行者123 更新时间:2023-12-01 01:49:48 25 4
gpt4 key购买 nike

作为上周问题中的 I mentioned ,我正在使用 @coreywardexcellent walk-through 来处理 Rails 3 中的模式编辑窗口。但是,我对 Coffeescript 来说是一个相对新手,并且我在使用以下代码时遇到了问题应该在成功的 Ajax 响应上显示模式窗口。这是相关函数(取自 Corey's gist ):

$ ->
$modal = $('#modal')
$modal_close = $modal.find('.close')
$modal_container = $('#modal-container')

# Handle modal links with the data-remote attribute
$(document).on 'ajax:success', 'a[data-remote]', (xhr, data, status) ->
$modal
.html(data)
.prepend($modal_close)
.css('top', $(window).scrollTop() + 40)
.show()
$modal_container.show();

$(document).on 'click', '#modal .close', ->
$modal_container.hide()
$modal.hide()
false

我已经确定函数内的所有代码都可以工作;它只是永远不会被调用。我可以在 Chrome 网络面板中看到 Ajax 查询,并验证它是否返回正确的响应。

我简化了代码以在 ajax:success 事件上弹出警报:

  $(document).on 'ajax:success', () -> 
alert('Ajax success event!')

...什么也没有。所以我认为“ajax:success”事件永远不会发生。

为了提取重复问题的最简单的代码,我使用以下代码设置了 this jsFiddle:

<a href="javascript:$.ajax('/echo/js/?delay=2&js=WHEEEEE!');" data-remote="true">Edit</a>​

$(document).on 'ajax:success', () -> 
alert('Ajax success event!')

​...是的。没有什么。 jsFiddle Ajax echo 返回它应该返回的内容,但该函数永远不会被调用。所以我对 .on('ajax:success') 做了一些错误的事情。 (这与 this question 是相反的问题,所以这个答案没有帮助。 This question ,关于响应的 mime 类型,看起来很有希望,但没有解释为什么 jsFiddle 不起作用,因为那不起作用不要碰我的 Controller 。)这是什么?

预计到达时间:我可能应该提到这里涉及的堆栈。 捂脸

  • Rails 3.2.8
  • jquery-rails 2.1.3
  • ...这意味着 jQuery 1.8.2

最佳答案

好的,明白了。我需要进行两项更改:

  • 首先,按照this answer的建议,我需要在响应中返回 text/json MIME 类型。我之前的操作如下所示:
  def edit
respond_to do |format|
format.js
format.html
end
end

为了获得 text/json 响应,我得到了以下结果:

  def edit
respond_to do |format|
format.js { render :json => { :html => render_to_string('edit')}, :content_type => 'text/json' }
format.html
end
end

该更改触发了 ajax:success,因此运行了开放模式函数。

  • 但是,由于响应负载现在位于 data.html 中,而不仅仅是 data,因此我需要调整 modal.js.coffee > 将标记实际放入模态中:
  .html(data.html) // instead of .html(data)

关于jquery - Coffeescript 不处理 ajax :success,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13362648/

25 4 0