首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$.ajax和的JSONstore

$.ajax和的JSONstore
EN

Stack Overflow用户
提问于 2014-06-19 12:50:04
回答 2查看 447关注 0票数 0

我试图存储$.ajax()函数返回的json数据,但是遇到了问题。下面是我所做的调用(我知道它正确地返回了我的JSON数据,我已经记录了它(出于个人原因删除了url)。

代码语言:javascript
复制
$.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:

代码语言:javascript
复制
//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调用的包装器):

代码语言:javascript
复制
WL.JSONStore.get(collectionName).add(getJSONData());

但是,当我打印集合时,它中没有存储任何内容,当我打印WL.JSONStore.get(collectionName).count时,什么也不返回。如何正确地添加返回给我的数据?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-19 14:55:15

AJAX调用和JSONStore API都是异步API,这意味着您要么必须使用它们返回的延迟调用,要么传递一个成功回调,以便在进入下一个步骤之前等待它完成。

获得PERSISTENT_STORE_NOT_OPEN的原因是您正在调用init,而不是等待它完成,而是立即调用add而不执行init,这就是为什么它说存储尚未初始化。

你可能会做这样的事:

代码语言:javascript
复制
$.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调用中返回一个承诺,这样您就可以使用这些承诺来处理回调,而不必每次都传递成功和失败的回调。

票数 2
EN

Stack Overflow用户

发布于 2014-06-19 13:25:21

上面您正在进行的调用是异步的。所以它很可能不会像你想的那样返回。

你要么必须:

  1. 使用延迟等待返回
  2. 将JSONStore add命令放入ajax调用的成功函数中。
  3. 使用同步标志调用ajax:jQuery: Performing synchronous AJAX requests
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24307062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档