【问题标题】:Return boolean from Ruby controller to Ajax call从 Ruby 控制器返回布尔值到 Ajax 调用
【发布时间】:2014-04-29 09:13:02
【问题描述】:

我正在尝试借助 JSON 将以下操作中的布尔值返回给 Ajax:

控制器

get "#{$INDEX_BASE_URL}/login" do
  user_id = params[:user_id]

  if ToConfigureUser.check_existence(user_id)
    data = {:bool => 'true'}.to_json
    return data
  else
    data = {:bool => 'false'}.to_json
    return data
  end 
end

我正在使用 JSON,但我什至不确定这是否是最佳做法。

这是阿贾克斯:

AJAX

$.ajax(url,{
        datatype: "json",
        contenType: "application/json; charset=utf-8",
        type: "GET",
        data:{
            'user_id' : user_id
        },
        success: function(data){                
            if(data.bool == "true")
            {
                alert("True");
            }   
            else
            {
                alert("False");
            }
        },
        error: function(data){
            alert("Something went wrong");
        }
    });

即使方法“check_existence”返回真,我的 Ajax 也总是提示“假”。可能是因为我的 JSON 构造不好。如何将一个布尔值从 Ruby 控制器返回给 Ajax?它不一定必须是 JSON,如果有更好的方法请告诉我。

【问题讨论】:

  • 你必须使用render :json => { bool: <VALUE> }之类的东西而不是return。
  • @DaniëlKnippers 现在我收到渲染方法的错误“ArgumentError - 参数数量错误(1 代表 2..4)”
  • 我对你的get "#{$INDEX_BASE_URL}/login" do 部分感到困惑。我认为您的控制器应该定义一个呈现 json 的 def login,并在您的 AJAX 中向 "/login" 发出请求,该请求应该路由到该控制器操作。我觉得你做得不对,也许this example可以帮助你。

标签: ruby ajax json boolean return


【解决方案1】:

内容类型可能设置不正确,因为您在 contentType 中缺少 t

【讨论】:

  • 我改了,但遗憾的是这不是问题,还是谢谢
【解决方案2】:

我解决了这个问题。将 :bool 更改为 'bool'

控制器

get "#{$INDEX_BASE_URL}/login" do
  user_id = params[:user_id]

  if ToConfigureUser.check_existence(user_id)
   {'bool' => 'true'}.to_json
  else
   {'bool' => 'false'}.to_json
  end 
end

我没有对 Ajax 代码进行任何更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    相关资源
    最近更新 更多