$ .ajax完成没有做任何响应

时间:2014-08-30 21:31:11

标签: jquery ruby-on-rails ajax

所以我似乎无法将这些数据填充到我的选择菜单中。我从ajax调用中得到了回复,但.html调用似乎忽略了它。有趣的是,我尝试了success:.done,但这些实际上是封锁的,并且根本没有开火。

$ ->
  $('#vehicle-query #make').on 'change', ->
    $.ajax
      type: 'get'
      dataType: 'script'
      url: '/vehicles/model_query'
      data:
        make: $(this).val()
    .complete (opt) ->
      $('#vehicle-query #model').html opt
      $('#vehicle-query #model').prop 'disabled', false
      $('#vehicle-query #year').val ''
      $('#vehicle-query #year').prop 'disabled', true
      $('#vehicle-query #style').val ''
      $('#vehicle-query #style').prop 'disabled', true

另一个注意事项,我在Rails中发出此请求,并从控制器响应:

render partial: 'vehicles/query_menu',
       object: @models,
       as: :options,
       locals: {select: 'Model'},
       layout: false

并从haml文件构建响应。

证明我得到了我想要的回复:

enter image description here

2 个答案:

答案 0 :(得分:0)

jQuery ajax complete根据文档:

  

该函数传递两个参数:jqXHR(在jQuery 1.4.x中,   XMLHTTPRequest)对象和分类状态的字符串   请求(“成功”,“未修改”,“错误”,“超时”,“中止”或   “parsererror”)。

所以你没有直接得到html响应。您的案例中的第一个参数opt将是jqXHR对象。致电opt.responseText获取HTML。

答案 1 :(得分:0)

<强>的Ajax

您遇到的主要问题是success的{​​{1}}功能不起作用

我最近才知道ajaxsuccess之间的区别与响应类型无关;这与error请求是否达到其目标

有关

有趣的是ajax适合您,因为根据.complete提供的参考,它会捕获Ahmedsuccess回调 - 向我建议您对ajax的响应或请求有疑问

-

首先,我会改变你的JS(以确保它可以与Turbolinks一起使用):

error

其次,仅仅因为你的#app/assets/javascripts/application.js $(document).on 'change', '#vehicle-query #make' -> $.ajax type: 'get' dataType: 'script' url: '/vehicles/model_query' data: make: $(this).val() success: (data) -> alert data $('#vehicle-query #model').html data $('#vehicle-query #model').prop 'disabled', false $('#vehicle-query #year').val '' $('#vehicle-query #year').prop 'disabled', true $('#vehicle-query #style').val '' $('#vehicle-query #style').prop 'disabled', true 方法不起作用,并不意味着事情已经无法修复。它只是意味着你可能没有调用正确的功能。

由于您尝试填充.html输入,我最初对<select>函数持怀疑态度。但是,当我在JSFiddle上测试时,我发现它是一个有效的用例。

所以我实际上看看.html所说的内容 - 很可能是你没有调用正确的Ahmed回调。尝试使用上面的data函数,或者您可能希望查看引用complete方法发送的不同数据对象:

success

这意味着您将从中受益:

Function( Event event, jqXHR jqXHR, PlainObject ajaxOptions )