javascript - 同步 AJAX...我知道这听起来很疯狂

标签 javascript ajax

我有在 .Net 4.0 Web 应用程序中通过 AJAX 调用的 Web 方法。在许多情况下,AJAX 调用在 for 循环中重复进行。我的问题是,Web 方法同步到我的服务器的信息带有时间戳,因此必须按照我将其发送到 AJAX 的顺序进行同步。不幸的是,似乎无论什么先完成,都只是先完成,而且时间戳都是乱序的。我基本上需要对 AJAX 请求进行排队,以便它们按顺序执行而不是异步执行,我知道这是 AJAX 中的 A,所以这可能是一个完全愚蠢的问题。

如何强制 for 循环中完成的 AJAX 调用的执行顺序?

编辑:一些代码

                    for (var i = 0; i < itemCnt - 1; i++) {

                    try {
                        key = items[i];
                        item = localStorage.getItem(key);
                        vals = item.split(",");
                        type = getType(key);


                        if (type == "Status") {
                            var Call = key.substring(7, 17);
                            var OldStat = vals[0];
                            var NewStat = vals[1];
                            var Date1 = vals[2];
                            var Time1 = vals[3];
                            var miles = vals[4];

                            try {
                                stat(Call, OldStat, NewStat, Date1, Time1, miles, key);

                            }
                            catch (e) {
                                alert("Status " + e);
                                return;
                            }

                        }
                        else if (type == "Notes") {
                            var Call = key.substring(6, 16);
                            var Notes = item;
                            try {
                                addNotes(Call, Notes);
                            }
                            catch (e) {
                                alert("Notes " + e);
                                return;
                            }
                        }
                        else if (key == "StartNCTime" || key == "EndNCTime") {
                            var TechID = vals[0];
                            var Date = vals[1];
                            var Time = vals[2];
                            var Activity = vals[3];
                            var Location = vals[4];
                            var Type = vals[5];

                            try {
                                logTime(TechID, Date, Time, Activity, Location, Type, 
                            }
                            catch (e) {
                                alert(key + ' ' + e);
                                return;
                            }

                        }
                    }
                    catch (e) {
                        alert(key + ' ' + e);
                        return;
                    }
                }

function stat(Call, OldStat, NewStat, Date1, Time1, miles, key) {
$.ajax({
    type: "POST",
    dataType: "json",
    contentType: "application/json",
    url: "Service.asmx/update_Stat",
    data: '{ CallNumber:"' + Call + '", OldStat:"' + OldStat + '", NewStat:"' + NewStat + '", Date1:"' + Date1 + '", Time1:"' + Time1 + '", Miles: "' + miles + '"}',
    success: function (data) { },
    error: function (xhr, status, error) {
        var err = eval("(" + xhr.responseText + ")");
        alert("Sync Update Stat: " + err.Message);
        location = location;
    }
});
}

function logTime(TechID, Date, Time, Activity, Location, Type, key) {
$.ajax({
    type: "POST",
    dataType: "json",
    contentType: "application/json",
    url: "Service.asmx/nonCallTime",
    data: '{ TechID:"' + TechID + '", Date1:"' + Date + '", Time1:"' + Time + '", Activity:"' + Activity + '", Location:"' + Location + '", Type: "' + Type + '"}',
    success: function (data) { },
    error: function (xhr, status, error) {
        var err = eval("(" + xhr.responseText + ")");
        alert("Sync Non Call Time: " + err.Message);
        location = location;
    }
});
}

function addNotes(Call, Notes) {
$.ajax({
    type: "POST",
    dataType: "json",
    contentType: "application/json",
    url: "Service.asmx/addNote",
    data: '{ Call:"' + Call + '", Notes:"' + Notes + '"}',
    success: function (data) { },
    error: function (xhr, status, error) {
        var err = eval("(" + xhr.responseText + ")");
        alert("Sync Notes: " + err.Message);
        location = location;
    }
});

}

最佳答案

您必须使用回调。

function ajax1(){
   //..some code
   //on ajax success:
   ajax2();
}

//etcetera...

或者我可以建议使用像 jQuery 这样的 javascript 库来为您同步 ajax 请求。

关于javascript - 同步 AJAX...我知道这听起来很疯狂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8011066/

相关文章:

javascript - 将多个变量导出为一个

javascript - ExtJS 加载嵌套 JSON

javascript - 我试图让这段代码在 Visual Studio 2010 中工作,它在 Firefox 浏览器中显示我的 "SWFObject is undefined"。 swfobject.js 是 2.2

Ruby/Sinatra Ajax 驱动的应用程序操作指南

javascript - 使用 php mysql 登录 cordova

javascript - 如何使用 JQuery 选择鼠标悬停的对象?

javascript - 使用 jquery 和 ajax 自动保存表单字段输入

c# - ASP.NET MVC 中的 Ajax 文件上传和 JQuery 表单数据

javascript - 快速点击时未调用 AJAX 请求

javascript - 如何在页面上添加数百个形状而不减慢页面加载速度