多个jquery ajax api保存最后一个值,并仅使用该值执行成功函数
我想迭代一类元素,使用每个特定元素的一些信息执行ajax调用,并对结果进行一些操作 这是我的jquery代码多个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
$(".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,直到您得到所有响应。