Ajax-вызовы из jquery по умолчанию являются асинхронными, поэтому вполне вероятно, что несколько вызовов будут инициированы до того, как какой-либо из них завершится успешно или не удастся. Если вы хотите, чтобы они были синхронными, вам нужно добавить async: false
в качестве параметра.
Вы также ограничены двумя асинхронными запросами одновременно, что также, я уверен, является фактором здесь.
Это не похоже на лучшую архитектуру - почему бы не объединить все данные в один запрос и настроить ваш WebService / PageMethod так, чтобы он мог обрабатывать массив или коллекцию? Это более простая архитектура, которая также будет выполнять намного лучше, чем один запрос на строку.
Чтобы передать массив, в C # вы должны сделать что-то подобное в вашем методе:
using System.Runtime.Serialization;
...
[Serializable]
class Data {
DateTime StartDate;
DateTime EndDate;
}
// or really any serializable IEnumerable
public static MyMethod(string data) {
JavaScriptSerializer serializer = new JavaScriptSerializer();
Data[] data = (Data[])serializer.Deserialize(data);
foreach (Data item in data) {
// do stuff
}
}
в Javascript, создайте свой массив (или объект), например,
var dates = Array();
// loop
var datestruct = {
StartDate: startDate,
EndDate: endDate
}
dates[index]=dateStruct;
// end loop
затем для data:
в вашем $ .ajax:
$.toJSON(dates)
Вы также можете построить строку вручную, как сейчас, скобки []
обозначают элементы массива. например,
"{['StartDate':'"+startDate+"','EndDate':'"+endDate+"'],['StartDate ... ]}"
но почему бы не использовать что-то вроде сериализатора JSON, которое сделает это за вас?