$.ajax和IBM Worklight';s JSONstore
我试图存储$.ajax()函数返回的json数据,但遇到了问题。下面是我所做的调用(我知道它正确地返回了我的JSON数据,我已经记录了它(由于个人原因删除了url) 然后我使用worklight初始化我的JSONStore:$.ajax和IBM Worklight';s JSONstore,json,ibm-mobilefirst,jsonstore,Json,Ibm Mobilefirst,Jsonstore,我试图存储$.ajax()函数返回的json数据,但遇到了问题。下面是我所做的调用(我知道它正确地返回了我的JSON数据,我已经记录了它(由于个人原因删除了url) 然后我使用worklight初始化我的JSONStore: //Setup JSON store var collectionName = 'people'; //Object that defines all the collections var collections = {}; //Object that defines
//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).count时,也没有返回任何内容。我如何才能正确添加返回给我的数据?您在上面进行的调用是异步的。因此,它可能不会返回您认为是的内容 您必须:
您在上面进行的调用是异步的,因此它可能不会返回您认为是的结果 您必须:
您在上面进行的调用是异步的,因此它可能不会返回您认为是的结果 您必须:
您在上面进行的调用是异步的,因此它可能不会返回您认为是的结果 您必须:
AJAX调用和JSONStore API都是异步API,这意味着您要么使用它们返回的延迟API,要么传递一个成功回调,以便能够在进入下一步之前等待它完成 持久存储未打开的原因是,您正在调用init,而不是等待它完成,而是在未完成init的情况下立即调用add,这就是为什么它说存储尚未初始化 您可能会这样做:
$.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中延迟和承诺的更多信息,以供参考:
JSONStore在每次API调用时都会返回一个承诺,这样您就可以使用这些承诺来处理回调,而不必每次都传递成功和失败回调。AJAX调用和JSONStore API都是异步API,这意味着您要么使用它们返回的延迟API,要么传递成功回调以使其成为able在进行下一步之前,请等待它完成 持久存储未打开的原因是,您正在调用init,而不是等待它完成,而是在未完成init的情况下立即调用add,这就是为什么它说存储尚未初始化 您可能会这样做:
$.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中延迟和承诺的更多信息,以供参考:
JSONStore在每次API调用时都会返回一个承诺,这样您就可以使用这些承诺来处理回调,而不必每次都传递成功和失败回调。AJAX调用和JSONStore API都是异步API,这意味着您要么使用它们返回的延迟API,要么传递成功回调以使其成为able在进行下一步之前,请等待它完成 持久存储未打开的原因是,您正在调用init,而不是等待它完成,而是在未完成init的情况下立即调用add,这就是为什么它说存储尚未初始化 您可能会这样做:
$.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中延迟和承诺的更多信息,以供参考:
JSONStore在每次API调用时都会返回一个承诺,这样您就可以使用这些承诺来处理回调,而不必每次都传递成功和失败回调。AJAX调用和JSONStore API都是异步API,这意味着您要么使用它们返回的延迟API,要么传递成功回调以使其成为able在进行下一步之前,请等待它完成 持久存储未打开的原因是,您正在调用init,而不是等待它完成,而是在未完成init的情况下立即调用add,这就是为什么它说存储尚未初始化 您可能会这样做:
$.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中延迟和承诺的更多信息,以供参考:
JSONStore在每次API调用中都会返回一个承诺,这样您就可以使用这些承诺来处理回调,而不必每次都传递成功和失败回调。谢谢。我尝试将add命令放入success函数中,但现在我得到了:[wl.JSONStore]{“src”:“store”,“err”:-50,“msg”:“PERSISTENT\u store\u NOT\u OPEN”,“col”:“people”,“usr”:“jsonstore”,“doc”:{},“res”:{}}。不过我已经初始化了存储,所以我不明白为什么会发生这种情况。我本来打算在这里回复一条评论,但是我的答案太长了,所以我把它放在一个单独的答案中。基本上,你调用init时,它好像是同步的,但它是异步的,所以当你