【问题标题】:Rails Ajax, success callback data undefinedRails Ajax,成功回调数据未定义
【发布时间】:2014-06-17 18:23:46
【问题描述】:

所以我对 Rails 还很陌生。

这是我的问题:

我的咖啡脚本中有一个对租户模型的 Ajax 调用,编辑页面。

$("#tenant_tenantbuildinginfo").change ->
    $.ajax
        url: "/buildings/getgst",
        dataType: "json",
        data: 'buildinginfo' : $(this).val(),
        success: (data) ->
            console.log data
            $("#tenant_gst").val data
        error: (data) ->
            console.log 'error'
    return false

所以这个 ajax 调用的想法是从 Buildings 控制器中的方法返回一个税率,例如“5.6”,(完美运行)...

   def getgst
     d { 'gets fired' }
     s = Building.get_gst_for_building(params[:buildinginfo])
     d { s.to_s('F') }
     @var = s.to_s('F')

     respond_to do |format|
       format.json { render json: @var }
     end

   end

d { } 行是记录器,这就是为什么我知道正在调用该函数并返回正确值的原因。 很好,到目前为止,Ajax 调用运行良好。但是,现在我的问题是在成功函数中解析或呈现返回值。

success: (data) ->
console.log data
$("#tenant_gst").val data

AJAX 调用的这一部分在我的控制台中返回“未定义”,这真的很奇怪,因为在我的控制器操作中,我将 @var 渲染为 json,而 ajax 调用需要 json。

感谢任何帮助,非常感谢!

【问题讨论】:

    标签: jquery ruby-on-rails ajax jquery-callback


    【解决方案1】:

    undefined 表示数据变量未定义。首先,json 格式希望您以 key: value 格式返回答案,因此您应该使用例如:

    format.json { render json: { "gst": @var } } 在您的控制器响应中

    你使用了错误的coffeescript,因为成功和错误方法被传递给数据变量,你可以在这里尝试检查它是如何解析为JS的:http://js2coffee.org/

    你的意思可能是

    $("#tenant_tenantbuildinginfo").change ->
        $.ajax
            url: "/buildings/getgst",
            dataType: "json",
            data: 'buildinginfo' : $(this).val()
            success: (data) ->
                console.log data
                $("#tenant_gst").val data
            error: (data) ->
                console.log 'error'
        return false
    

    (注意$("#tenant_gst").val data行尾没有逗号)

    其次,在jQuery调用中引用error / success responses时,我宁愿尝试方法链。:

    $("#tenant_tenantbuildinginfo").change ->
      $.ajax(
        url: "/buildings/getgst"
        dataType: "json"
        data:
          buildinginfo: $(this).val()
      ).success( (data) ->
          console.log data
          $("#tenant_gst").val data
      ).error( (data) ->
          console.log "error"
      )
    

    【讨论】:

    • 嘿,我尝试了你的提示,但现在没有调用 rails 方法,我得到 GET localhost:3000/buildings/… 500 (Internal Server Error) responseText: "

      ↵ SyntaxError↵在 BuildingsController#getgst↵

      ↵↵

      /Users/mubi/Desktop/JR Buildings/jrbuilding/app/controllers/buildings_controller.rb:22:语法错误,意外 ':',期待 =>↵

    • 嗨,很抱歉我的错误,当然我的意思是:format.json { render json: { gst: @var } } 注意符号而不是 gst 的字符串。如果您要使用字符串,那么"gst" => @var BTW。使用比@var 更有意义的名称。 @ 已经意味着变量:) 使用例如简单的@gst
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签