1

我正在尝试从 dojo xhrGet 调用中获取 json 对象。

我想要的是 jsonobject = stuff;

我可以在控制台中看到 json 对象,但无法访问它!


   var xhrargs = {
    网址:“/休息/网址”,
    句柄作为:“json”,
    防止缓存:假,
    加载:函数(json_results){
      控制台.log(json_results);
      存储 = json_results;
      返回 dojo.toJson.json_results;
    },
    错误:函数(响应,ioArgs){
      控制台.错误(响应);
      console.error(response.stack);
    }   
   };

    var deferred = dojo.xhrGet(xhrargs);
    console.log("Json 是 "+JSON.stringify(deferred));


显示 json_results 的 console.log 部分很好,正是我想要的。

4

2 回答 2

3

这些dojo.xhrXXX方法是异步的。这意味着下面的行

var deferred = dojo.xhrGet(xhrargs);

在处理对外部端点的调用时将继续执行。这意味着您需要使用 promise API 来告诉某个代码块在 XHR 请求完成后执行:

var deferred = dojo.xhrGet(xhrargs);
deferred.then(function(result){
    //this function executes when the deferred is resolved (complete)
    console.log('result of xhr is ',result);
});

由于请求的异步性质,对于大多数意图和目的,该值不存在于回调函数的范围之外。围绕此构建代码的一种方法是在多个块中。例如:

var xhrLoaded = function(results){
    console.log('results = ',results);
    store = results;
}

var  performXhr = function(){
    var xhrargs = {
        url: "/rest/url",
        handleAs: "json",
        preventCache : false,
        error: function(response, ioArgs) {
          console.error(response);
          console.error(response.stack);
        }   
    };
    var deferred = dojo.xhrGet(xhrargs);
    deferred.then(xhrLoaded);
}

performXhr();

您仍然可以访问函数范围之外的变量(例如,如果store是全局定义的)。

于 2013-09-24T12:03:10.220 回答
0

尝试这个

    var xhrArgs = {
              url:"MethodName.action?Id="+id,
              handleAs: "json",
              load: function(Data){               
                var values = Data;  
                var count = Object.keys(values).length // gives u all keys count in a json object. In mine it is 0,1,2,3

                for (var i =0; i<count; i++){
                    var temp = values[i]; // values['name']
                  // do somthing ..
                    }
                }                   
              },
              error: function(error){       
                      alert(error);
              }                   
    }
    dojo.xhrPost(xhrArgs);
于 2019-05-20T09:36:07.933 回答