0

我最初尝试使用 $.ajax 来执行此操作,但没有成功。.load 对我很好,所以我使用了它。但是,现在我发现自己需要一些 $.ajax 附带的回调。

 jQuery ->
   fl = $("#flight_flightlesson_id")
     fl.on "change", ->
       $("#gradable_items_container").load("gradable_items_inputs?lesson=#{fl.val()} #ajax_gradable_items_for_lesson_content")

When the chosen lesson input changes this passes the lesson_id as a url param to the flights_controller action gradable_items_inputs, populates a template of the same name, and loads that content into the browser without a reload. 效果很好。

但是,我想使用这些回调

  beforeSend: ->
    $("#ajax_tell").addClass "is-fetching"

    //success: (response) ->
    //  $("#gradable_items_container").html(response)

    complete: (response) ->
      $("#ajax_tell").removeClass "is-fetching"
      alert "complete"

    error: ->
      $("#{ajax_tell}").html "<p>ERROR</p>"
      alert "error"

我如何将现有的 .load 转换为此 $.ajax?

4

2 回答 2

1

$.load()只是一个方便的方法包装器,$.ajax()其中一些选项已经设置好 ,并且使用ajax 成功的方法dataType:'html'自动填充选择器。html()

$.post(), $.get(), $.getJSON()等也是如此

遵循$.ajax()api 并使用您需要的任何选项来更灵活地做同样的事情。

唯一的超关键选项是urlhtml()用来匹配load()方法的成功或完成或完成回调。API 概述了其他选项的默认值(如果有),并且到处都有大量示例

于 2013-10-27T17:22:54.523 回答
0

这似乎是一个很好的转换

  fl = $("#flight_flightlesson_id")
  fl.on "change", ->
    $.ajax
      url: "gradable_items_inputs?lesson=#{fl.val()}"

    beforeSend: ->
      $("#ajax_tell").addClass "is-fetching"

    complete: ->

    success: (data) ->
      // $("#gradable_items_container").empty().append $(data).find("#ajax_gradable_items_for_lesson_content")
      $("#gradable_items_container").html(data).find("#ajax_gradable_items_for_lesson_‌​content")
      $("#ajax_tell").removeClass "is-fetching"

    error: ->
      $("#{ajax_tell}").html "<p>ERROR</p>"
于 2013-10-27T17:33:53.583 回答