加载json文件时出现Ajax问题

时间:2015-09-09 08:54:52

标签: javascript jquery ajax backbone.js

我使用setItem将json字符串保存到本地存储,然后使用getItem将其恢复。这是有效的,但是当通过ajax加载相同的json字符串时,对象变得不同了。

以下是google-chrome browserconsole中的原始对象

collection_parameter: Object
->OFFLINE: Array s
  ->_byId: Object
  ->models: Array[500]
..

这是 stringified json (getItem,setItem)local-storage:

   {"OFFLINE":[{ "data_type":"OFFLINE",
                 "Number":"1",
                 "val_param_1_2_3":0 }, 
               {..},
               {..} ]
   }

当我将上述json-string保存在文件中时,例如调用Test.json并通过ajax加载它,对象就不再相同了。

此处 ajax 致电:

  $.ajax({                                    //Laden
        url:      'Test.json',
        method:   'GET',
        dataType: 'json',
        success: function(recieved_json_parameters) {

            collections_parameter=recieved_json_parameters;


        }//end success
    });//end ajax

google-chrome中的新对象 collection_parameter现在是:

collection_parameter: Object
->OFFLINE: Array [500]

缺少其他节点。如何获得与上面完全相同的对象类型?

UPDATE1:这就是我创建原始json的方式:

var collections_parameter = { OFFLINE: Backbone.Collection.extend() }
collections_parameter.OFFLINE = new collections_parameter.OFFLINE(json);

1 个答案:

答案 0 :(得分:1)

为了存储Backbone Collection,您应该保存集合所具有的原始数据,您可以使用toJSON()获取:(返回的值是对象数组)

collection.toJSON() /* store the object returned by this function */

(在您的情况下,我认为该集合是collection_parameter.OFFLINE

检索表示数据的JSON后,创建一个使用它初始化的新Backbone Collection

collection = new MyCollection(json)

其中MyCollection是您正在使用的Backbone.Collection的子类,或Backbone.Collection本身,json是您检索的对象。

原因是您需要存储Collection表示的实际数据。 Collection对象本身为您提供了访问和更改基础数据的功能,但它不是数据本身,因此不应该对其进行序列化和存储。检索原始数据后,您将创建一个新的Collection,它将为您提供访问数据的各种功能。