如何在我之前处理来自请求的数据时发送ajax请求?

时间:2011-04-05 09:49:56

标签: javascript dojo

在我的应用程序启动时,我需要发送三个ajax get(Dojo xhrGET)请求,但问题是我需要在第一次处理数据时发送第二个,在第二个处理数据时发送第三个(顺序很重要! )。我把这个请求放在另外一个但有时候不起作用。如何同步和解决这个问题,有没有办法在Java中锁定或等待?

3 个答案:

答案 0 :(得分:1)

您可以使用选项sync = true,并将请求置于其他位置。有了这个,第3次将在第1次之后发送。 或者你可以在第一次使用加载功能完成后发送第二个请求。 例如:

dojo.xhrGet({ //1st request
    load: function(){
        dojo.xhrGet({ //2nd request
            load: function(){
                dojo.xhrGet({ //3nd request

                });
            }
        });
    }
});

有关详细信息:http://dojotoolkit.org/reference-guide/dojo/xhrGet.html

答案 1 :(得分:1)

如果您使用的是1.6,请查看新的Promises API(由dojo.xhrGet返回),或使用1.5中的延迟。他们提供了一种“整洁”的方式来实现这一目标。

基本上你可以写:

dojo.xhrGet({
    url: './_data/states.json',
    handleAs: 'json'
}).then(    
    function(response) {
        // Response is the XHR response
        console.log(response);
        dojo.xhrGet({
            url: './_data/'+response.identifier+'.json',
            handleAs: 'json'
        }).then(
            function(response2) {
                // The second XHR will fail
            },
            // Use the error function directly
            errorFun
        )
    },
    function(errResponse) {
        // Create a function to handle the response
        errorFun(err);
    }
)

var errorFun = function(err) {
    console.log(err);
}

有关详细信息,请参阅http://dojotoolkit.org/documentation/tutorials/1.6/deferreds/http://dojotoolkit.org/documentation/tutorials/1.6/promises/

答案 2 :(得分:0)

我们可以在第一个请求的成功回调方法中发出第二个ajax请求: $就({

'type' : 'get', // change if needed
'dataType' : 'text', // data type you're expecting
'data' : { 'className' : divClass },
'url' : url,
'success' : function(newClass) {
  //make the second ajax request...
}

});

为第三个请求做同样的事情。