在Javascript中排队或允许多个AJAX请求?

在Javascript中排队或允许多个AJAX请求?,javascript,radajaxmanager,Javascript,Radajaxmanager,我有以下场景: 用户可以将控件拖放到页面上。“Droping”客户端事件初始化ajaxRequest,如下所示: function OnClientDropping(sender, eventArgs) { var sourceItem = eventArgs.get_sourceItem(); var droppedID = eventArgs.get_htmlElement().id; if (droppedID.indexOf("RadDockZone") !=

我有以下场景:

用户可以将控件拖放到页面上。“Droping”客户端事件初始化ajaxRequest,如下所示:

function OnClientDropping(sender, eventArgs) {
    var sourceItem = eventArgs.get_sourceItem();
    var droppedID = eventArgs.get_htmlElement().id;

    if (droppedID.indexOf("RadDockZone") != -1) {
        if ($find(droppedID).get_docks().length == 0) {
            var eventData = {};
            eventData["sourceItemText"] = sourceItem.get_text();
            eventData["sourceItemValue"] = sourceItem.get_value();
            eventData["listBoxID"] = sender.get_id();

            $find(ajaxManagerID).ajaxRequestWithTarget(droppedID, $.toJSON(eventData));
    }
}
现在,在处理此ajaxRequest时,用户仍然可以完全控制鼠标。当此事件仍在处理时,他们希望将另一个控件拖放到页面上的情况并不少见

当前,如果他们这样做,第一个事件将被取消,然后第二个事件将成功运行。我在想我怎么能把这些事件排成一列

我试图简单地将上述代码包装在“$.queue($find(ajaxManagerID)…)”中,但我没有注意到我的项目运行方式有任何变化

支持此场景的正确方法是什么

if (queue.length == 0) {
    queue.push(uniqueDockZoneID);
    queue.push(eventData);
    $find(ajaxManagerID).ajaxRequestWithTarget(uniqueDockZoneID, $.toJSON(eventData));
}
else {
    queue.push(uniqueDockZoneID);
    queue.push(eventData);
}

function endRequest(sender, eventArgs) {

    if (queue.length > 0) {
        queue.shift(); //Remove the ID of the control we just finished.
        queue.shift(); //Remove the data for the control we just finished.
    }

    //If we've got more ajax requests queued up.
    while (queue.length > 0) {
        uniqueDockZoneID = queue.shift();
        data = queue.shift();
        $find(ajaxManagerID).ajaxRequestWithTarget(uniqueDockZoneID, $.toJSON(data));
    }
}

为什么不将uniqueId和dockZoneID添加到一个数组中,然后在相关的ajax请求完成时从数组中删除每个项?

对不起,我认为我的示例很糟糕。让我稍微编辑一下代码。我没有试图在一个ajaxRequest中更新两个项目。整个函数稍后会被一个独立项再次调用。我仍然认为您可以使用数组来管理挂起的请求。我很困惑。您是否建议存储范围外的数组,将droppedID推入数组,然后在从数组中弹出第一个元素后执行ajax请求?我觉得jQuery的fx队列就是为了这个目的而创建的?我应该能够将ajax请求推送到这个队列中,不是吗?也许吧,但它不起作用,所以我提供了一个替代方案。也许这个解决方案比jQuery的队列更简单。所以,让我把这件事具体化。我保留一个数组,发生第一个drop事件,将元素推入数组并启动ajax请求。发生第二个drop事件时,我将元素推入数组。现在,循环,等待数组中的第一个元素就是刚刚推入数组的元素。当它看到“自身”时,ajaxRequest会触发吗?