Я понимаю, что JavaScript однопоточный (как объясняется в этом вопросе: If Javascript is not multithreaded, is there any reason to implement asynchronous Ajax Queuing?), однако я пытаюсь понять, как это относится к приложению, которое я разработал. См. Код ниже:AJAX, действующий многопоточным способом
function GetSQLTable() {
var str = $("#<%=fieldDatabaseReferences.ClientID%>")[0].value
var res = str.split(",");
$("#LoadingImage").show();
$("#LoadingImage2").show();
for (var i = 0; i < res.length; i++) {
(function (i, res) {
setTimeout(function() {
GetSQLTable2(i, res.length, res)
}, 0);
})(i, res);
}
}
function GetSQLTable2(i,reslength,res) {
//if (i == 0)
//{
// var start = new Date().getTime();
//}
var div = document.createElement('div');
div.id = "div" + i
document.getElementById('info_div').appendChild(div);
var PossiblesPage = false;
$.ajax({
type: "POST",
url: "PrimaryNominalAjax.aspx/GetSQLTable",
data: '{username: "' + $("#<%=fieldUserName.ClientID%>")[0].value + '", terminalname: "' + $("#<%=fieldTerminalName.ClientID%>")[0].value + '", terminalip: "' + $("#<%=fieldTerminalIP.ClientID%>")[0].value + '", mappingid: "' + res[i] + '", usergroup: "' + $("#<%=fieldUserGroup.ClientID%>")[0].value + '", usn: "' + $("#<%=fieldUSN.ClientID%>")[0].value + '", requester: "' + $("#<%=fieldRequester.ClientID%>")[0].value + '", reason: "' + $("#<%=fieldReason.ClientID%>")[0].value + '", rrd: "' + $("#<%=fieldRRD.ClientID%>")[0].value + '", review: "' + $("#<%=fieldReview.ClientID%>")[0].value + '", possibles: "' + PossiblesPage + '",linkno: "", urn1: "", urn2: ""}',
contentType: "application/json; charset=utf-8",
timeout: 80000000,
dataType: "json",
success: OnSuccess(i, reslength),
error: OnError,
failure: function (response) {
alert('there was an error loading the webpage')
}
});
}
fieldDatabaseReferences заполняется на стороне сервера. AJAX подключается к нескольким локальным базам данных (до 30) и размещает информацию на экране по мере готовности.
Звонки на различные серверы баз данных асинхронны. Неужели это многопоточный эффект?
Что ваш вопрос? –
Нет. Многопоточность отличается от асинхронной. Конечно, запросы происходят в теории * одновременно *, но Javascript работает в одном потоковом потоке событий, поэтому все «OnSuccess» выполняются за один раз. В отличие от многопоточности, где каждый атомный оператор внутри 'OnSuccess' может быть выполнен произвольным образом – CodingIntrigue
BTW: эта строка' success: OnSuccess (i, reslength), '(вероятно) не делает то, что вы думаете. – Jamiec