0

我有以下情况:

用户可以将控件拖放到页面上。'dropping' 客户端事件启动一个 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));
    }
}
4

1 回答 1

1

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

于 2011-07-15T21:35:52.707 回答