【问题标题】:Return json object from dojo.xhrget从 dojo.xhrget 返回 json 对象
【发布时间】:2013-09-29 14:30:50
【问题描述】:

我正在尝试从 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 部分很好,正是我想要的。

【问题讨论】:

    标签: json dojo


    【解决方案1】:

    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 是全局定义的)。

    【讨论】:

    • 谢谢!我对javascript真的很陌生,这显然是我没有得到的。是否可以从外部获取 json 数据?执行 deferred.then .... 也可以获取 json 数据,但我仍然无法从函数外部获取它,所以我的情况并不比以前好。
    【解决方案2】:

    试试这个

        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);
    

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 2015-02-18
      相关资源
      最近更新 更多