我试图存储$.ajax()函数返回的json数据,但是遇到了问题。下面是我所做的调用(我知道它正确地返回了我的JSON数据,我已经记录了它(出于个人原因删除了url)。
$.ajax({
type: "GET",
url: **url that returns json data**
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
return msg;
},
error: function(e){
WL.Logger.log(e);
}
});然后使用worklight初始化我的JSONStore:
//Setup JSON store
var collectionName = 'people';
//Object that defines all the collections
var collections = {};
//Object that defines the 'people' collection
collections[collectionName] = {};
WL.JSONStore.init(collections);所以现在我的问题就在这里。我想将从ajax调用返回的JSON数据添加到我的JSONStore中。因此,我尝试过这样做(getJSONData是上面ajax调用的包装器):
WL.JSONStore.get(collectionName).add(getJSONData());但是,当我打印集合时,它中没有存储任何内容,当我打印WL.JSONStore.get(collectionName).count时,什么也不返回。如何正确地添加返回给我的数据?
发布于 2014-06-19 14:55:15
AJAX调用和JSONStore API都是异步API,这意味着您要么必须使用它们返回的延迟调用,要么传递一个成功回调,以便在进入下一个步骤之前等待它完成。
获得PERSISTENT_STORE_NOT_OPEN的原因是您正在调用init,而不是等待它完成,而是立即调用add而不执行init,这就是为什么它说存储尚未初始化。
你可能会做这样的事:
$.ajax({
type: "GET",
url: **url that returns json data**
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
//Setup JSON store
var collectionName = 'people';
//Object that defines all the collections
var collections = {};
//Object that defines the 'people' collection
collections[collectionName] = {};
WL.JSONStore.init(collections)
.then(function(res){
WL.JSONStore.get(collectionName).add(getJSONData());
});
return msg;
},
error: function(e){
WL.Logger.log(e);
}
});(请注意我如何更改成功回调以使用AJAX调用的结果。)
编辑:以下是有关Javascript中延迟和承诺的更多信息,以供参考:http://code.tutsplus.com/tutorials/wrangle-async-tasks-with-jquery-promises--net-24135
JSONStore在每个API调用中返回一个承诺,这样您就可以使用这些承诺来处理回调,而不必每次都传递成功和失败的回调。
发布于 2014-06-19 13:25:21
上面您正在进行的调用是异步的。所以它很可能不会像你想的那样返回。
你要么必须:
https://stackoverflow.com/questions/24307062
复制相似问题