javascript - 如何在rails中使用JSON数据并将其提供给javascript

标签 javascript ruby-on-rails json object hash

我有一个 Rails 应用程序,其中有 JSON 数据,如下所示:

{"makes":[{"id":200347864,"name":"AM General","niceName":"am-general","models":[{"id":"AM_General_Hummer","name":"Hummer","niceName":"hummer","years":[{"id":3407,"year":1998},{"id":1140,"year":1999},{"id":305,"year":2000}]}]}]}

这是一个非常长的具有多级嵌套的汽车对象列表。品牌、型号、年份、内饰等

我想将此 JSON 发送到 JavaScript 并填充我的自动填充下拉菜单。

之前,我使用第三方 API,代码如下:

$( document ).ready(function() {


    var prev ="https://xyz/makes";
    var rest ="?fmt=json&api_key=";
    var key = "<%= ENV['XYZ_API_KEY'] %>";
    var net = prev+rest+key;

    var options = [];
    options.push("All");
    var dictionary = {};

         $.ajax({

            url: net,
            dataType: "json",
            type: "get", 
            data: $(this).serialize()
         }).done(function(data){
            change_make(data);
            change_model();
         });




    function change_make(data) {

        for (var key in data["makes"]){
            if (data["makes"].hasOwnProperty(key)){

                var make = data["makes"][key];

                options.push(make.name);

                buffer = [];

                // console.log(make.models);

                for (var key2 in make.models){

                    // console.log(make.models[key2].name);

                    if (make.models.hasOwnProperty(key2)){

                        // console.log(make.models[key2].name);

                        buffer.push(make.models[key2].name);
                    }

                }


                dictionary[make.name] = buffer;

            }
        }

        dictionary["All"] = ["All"]

        // console.log(options);

        $.each(options, function(key, value) {   
             $('#category')
                 .append($("<option></option>")                            
                    .attr("value", value.html_safe)
                    .text(value));  
        });    

    };



    $('#category').on('change', function(){


        console.log("change success");

        change_model();



    });


    function change_model(){

        var make = $('#category').find(":selected").text();        
        var models = dictionary[make];
        // models.unshift("All");

        $('#subcategory').empty();

        $.each(models, function(key, value) {   
             $('#subcategory')                
                 .append($("<option></option>")                            
                    .attr("value",value.html_safe)
                    .text(value));  
        });
    }    

    $("#searchboxcontainer").delay(100).fadeIn(200);   


});

我不想使用ajax请求,而是直接使用json字符串。 我在应用程序帮助程序模块中编写了一个帮助程序方法,如下所示:

 def edmunds_json      
  the_json_object
 end

但是当我在 javascript 中使用它时,它添加 &gm 字符和对象显示为:

{:makes=>[{:id=>200347864, :name=>“AM General”,...

代码出现错误

Uncaught SyntaxError: Unexpected token :

当我在 JSON 中使用转义时,它在 Rails unexpected $undefined 上给我错误。期待')

JSON 对象使用双引号,我想在我的代码中使用它。我应该如何进行才能不添加 > 等。

最佳答案

我认为你需要做的是首先在你的助手中将 Ruby Hash 转换为 json

def edmunds_json      
  the_json_object.to_json
end code here

然后在您的 View 中的脚本标记中执行类似的操作

<script>
  const object = <%= raw edmunds_json %>
  console.log(typeof(object)) // => Object
</script>

关于javascript - 如何在rails中使用JSON数据并将其提供给javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48938076/

相关文章:

javascript - 当超过 x 条记录时,dataTables 只显示一页 - ajax

java - 如何使用 JSON 中的 @RequestBody 绑定(bind)自定义对象的映射

ruby-on-rails - 如何命名类名包含数字的 Rails ruby​​ 文件?

c++ - "Best"C++ 的输入文件格式?

javascript - 是否有任何库可以为 JSON 数据生成元组和重构字符串?

c# - 获取使用 asp 注册的脚本引用列表 :ScriptManager

javascript - this.model.on 更改事件未触发

javascript - jquery 选择器 - 选择不在另一个嵌套标签内的值

ruby-on-rails - Rails 3 ActiveRecord 事务

javascript - 在页面渲染之前运行 Javascript 和 Controller 操作