多个jquery ajax api保存最后一个值,并仅使用该值执行成功函数

多个jquery ajax api保存最后一个值,并仅使用该值执行成功函数,jquery,ajax,Jquery,Ajax,我想迭代一类元素,使用每个特定元素的一些信息执行ajax调用,并对结果进行一些操作 这是我的jquery代码 $(".Topic").each(function () { var identify = $(this).attr('id'); var prestart = identify.indexOf('_'); var start = prestart + 1; var end = identify.length; var position = ide

我想迭代一类元素,使用每个特定元素的一些信息执行ajax调用,并对结果进行一些操作

这是我的jquery代码

$(".Topic").each(function () {
    var identify = $(this).attr('id');
    var prestart = identify.indexOf('_');
    var start = prestart + 1;
    var end = identify.length;
    var position = identify.substr(start, end);

    var trend = $("#Topic_" + position).text();

    $.ajax({
        type: "POST",
        url: "Results.aspx/CheckIfScheduled",
        data: "{\"Trend\":" + "\"" + trend + "\"" + "}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (results) {
            var str = results, obj = JSON.parse(str);
            if (str.Scheduled == true) {
                $("#IsSch_" + position).text(str.Date);
                $("#Sch_" + position).hide();
                $("#Cal_" + position).hide();
            }
        },
        error: alert("Error")
    });

});
后端代码只返回我在success函数中使用的序列化字符串。 我遇到的问题是,它首先迭代每个类元素,一旦完成迭代,它就开始使用它存储的最后一个值执行所有成功函数实例


我已尝试设置async:false,但我一直收到错误“意外令牌o”

我不知道它是否有效,但您可以尝试在成功回调中放置一个位置

$.ajax({
    type: "POST",
    url: "Results.aspx/CheckIfScheduled",
    data: "{\"Trend\":" + "\"" + trend + "\"" + "}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (results) {
        var positionInner = position;
        var str = results, obj = JSON.parse(str);
        if (str.Scheduled == true) {
            $("#IsSch_" + positionInner).text(str.Date);
            $("#Sch_" + positionInner).hide();
            $("#Cal_" + positionInner).hide();
        }
    },
    error: alert("Error")
});

我觉得奇怪的是,您的ajax调用被包装在一个.each中。这意味着对于每个“.Topic”类,它都将进行一个ajax调用。这就是您想要的吗?Topic类具有带有Topic_uuid的label元素,这些元素告诉我正在查看哪个标签,因为我使用的是asp:repeater。我想遍历每个标签,通过ajax调用发送它的文本值,并获取结果以用于在该行中设置其他元素。您能否尝试将成功函数中的代码移到ajax调用之外,然后在调用中添加“async:false”?问题出在您的位置,异步发送ajax时,您的位置就是最后一次调用的位置。当您收到响应时,您的代码位置是最后一个。要解决这个问题,我想到的第一件事就是根据请求发送职位,并在成功后重新接收。@RogérioEduardoBarreto,可能是.each比.ajax运行得更快,而且事情不同步。你的答案很有效!我也很好奇为什么我会在使用异步/同步调用时出错,似乎我只是试图解析一个不需要解析的对象,因此出现了错误。为了澄清这一点,可以使用我的原始代码减去
var str=results,obj=JSON.parse(str)
,将
str.Scheduled==true
更改为
results.d.Scheduled==true
text(results.d.Date)
并添加
async:false
。是的,如果服务器的格式符合100%的Json规范,(如果服务器使用“而不是“它不会解析…async:false也会解决您的问题,但它会冻结您的UI,直到您得到所有响应。