我有以下脚本-
function getdata(stringArray, Net) {
if (stringArray, [0] != "") {
var processing = false;
for (var i = 0; i < (stringArray, i++) {
var username = (stringArray, [i];
if (processing === false) {
processing = true;
$.when(
$.ajax({
type: "post",
contentType: "application/json; charset=utf-8",
url: "Default.aspx/getdata",
data: JSON.stringify({ test: 'test' }),
dataType: "json",
success: function (data) {
var json = data.d;
FinalJson = json;
doStuff(Net);
},
error: function (err) {
alert("Error please retry.");
}
})
).done(function () {
processing = false;
});
}
}
} else {
}
};
内stringArray
会有不同数量的字符串。对于每个字符串,我都想进行Ajax调用,但是请等到调用完成后再开始新的调用。
我认为,通过添加processing
变量并在进入函数时将其初始设置为false,然后在ajax调用之前将其.done
设置为true,就可以将设置处理为false来实现。
由于某种原因,它会触发第一个Ajax调用,然后停止,而不是在第一个调用完成时开始列表中的下一个。
我要去哪里错了?
编辑,更新
补充:从stringArray
使用中删除空字符串$.map()
;在处检查是否有空字符串$.each()
,然后再进行进一步处理
尝试(此模式)
$(function () {
// e.g. , with `html` : `<textarea></textarea>`
var stringArray = ["","a", "b", "c","", "1", "2", "", "3"];
var request = function (_string) {
return $.ajax({
url: "/echo/json/",
type: "POST",
data: {
json: JSON.stringify({
"d": _string
})
}
});
};
var Net = [];
var doStuff = function (n) {
// do stuff
// when all requests complete
$.each(n, function (k, v) {
$("textarea").append(v + "\n");
});
};
// remove `""` from `stringArray`
stringArray = $.map(stringArray, function(val, idx) {
return val != "" ? [val] : null
});
$.each(stringArray, function (k, v) {
// `""` removed from`stringArray` above ,
// check again
if (v != "") {
$.when(request(v))
.done(function (data, textStatus, jqxhr) {
if (textStatus === "success"
&& window.confirm("at index "
+ k + " of " + stringArray.length
+ " asynchronous requests supplied by `stringArray`,"
+ "continue")) {
// do stuff
// when each request completes
var json = data.d;
// FinalJson = json;
Net.push(data.d);
if (Net.length === stringArray.length) {
// do stuff
// when all requests complete
alert(textStatus + " " + Net.length
+ " requests completed");
doStuff(Net);
};
};
})
.fail(function (jqxhr, textStatus, errorThrown) {
console.log("error: " + textStatus, errorThrown);
$("textarea")
.val(jqxhr.getAllResponseHeaders()
+ "\n" + jqxhr.status + "\n" + textStatus
+ "\n" + errorThrown + "\n" + jqxhr.responseText)
});
};
});
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句