0

如何使用 dojo 一个接一个地执行两个 xhr.gets ?

我有 ....

require(["dojo/_base/xhr", "dojo/dom", "dojo/domReady!"],
function(xhr, dom) {

    // Using xhr.get, as very little information is being sent
    xhr.get({
        // The URL of the request
        url: "inc/etl2json.php?item=Execs",
        // The success callback with result from server
        load: function(execContent) {
            dom.byId("Execs").innerHTML = execContent;
        },
        // The error handler
        error: function() {
            // Do nothing -- keep old content there
        }
    });

});

我想对"inc/etl2json.php?item=Execs"做另一个 xhr.get并将其分配给dom.byId("Elapsed").innerHTML = elapsedContent;

4

3 回答 3

1

尽管嵌套是一个简单的解决方案,但它几乎总是会导致代码不可读,所以我会像@Ricardo 那样做,但是利用 Dojo 的Deferred (+ here ) 的优势并使用链接:

var requestUrl = "inc/etl2json.php?item=Execs";

xhr.get({ url: requestUrl})
    .then(function(results) {
        dom.byId("execs").innerHTML = results;
    })
    .then(function(results) {
        return xhr.get({ url: requestUrl});   
    })
    .then(function(results) {
        dom.byId("elapsed").innerHTML = results;
    }) 

在 jsFiddle 上查看它的实际效果:http: //jsfiddle.net/phusick/73X88/

于 2012-04-14T09:38:56.963 回答
1

只需在加载函数中再次调用 xhr.get() ,如果内容应该更改,否则您可以使用第一次检索到的相同数据:

xhr.get({
    load:function(data){
        //use the first data you retrieved
        xhr.get({
            load: function(data2){
             //do what you like with the nuew data
            }
        });
    }
});
于 2012-04-12T21:00:35.263 回答
0

我认为您应该为elapsedContent添加另一个xhr调用。我看不出这两个电话之间有任何关系,所以你应该把它们分开。没有必要将一个嵌套在另一个中。只需添加

xhr.get({
        // The URL of the request
        url: "inc/etl2json.php?item=Execs",
        // The success callback with result from server
        load: function(elapsedContent) {
            dom.byId("Elapsed").innerHTML = elapsedContent;
        },
        // The error handler
        error: function() {
            // Do nothing -- keep old content there
        }
    });
于 2012-04-13T15:37:31.520 回答