Member 11032733 Ответов: 1

Jquery ajax долгое время ожидания


Я с помощью jQuery AJAX, чтобы вызвать веб-метод в моем разделе asp.net вот код:

$.ajax({
            type: 'POST',
            url: 'Home.aspx/GetPlantInfo',
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            success: function (response) {
                info= JSON.parse(response.d);
                $("#PlantName").val(info.Name);
                .
                .
                .
            },
            failure: function (r) {
                alert(r.d);
            }
        });

webmethod выполняет простой запрос linq и сериализует результат в строку JSON, что занимает менее половины секунды. вот код webmethod:
    [WebMethod]
public static string GetPlantInfo()
{
    MyDataClassesDataContext dc = new  MyDataClassesDataContext();
    Plant p = (from x in dc.Plants
                   where x.Name == "someName"
                   select x).FirstOrDefault();
    string plantJson = JsonConvert.SerializeObject(p);
    return plantJson;
}

однако вызов ajax занимает 10-15 секунд. Я проверил время ajax, и, по-видимому, большая часть этого времени-это время "ожидания", с незначительным временем отправки и получения. Я погуглил эту проблему без блокировки. Я спрашиваю, что это за время "ожидания"? Это проблема с сервером IIS? что-то не так с моим кодом?

Что я уже пробовал:

я пробовал комментировать код c#, чтобы он возвращал пустую строку, но все равно есть время ожидания (хотя на этот раз оно меньше: 5~6 секунд).

Richard Deeming

Я бы начал с удаления двойной кодировки/декодирования JSON и обертывания вашего контекстного класса в using блок:

[WebMethod]
public static Plant GetPlantInfo()
{
    using (var dc = new  CMMS_MyDataClassesDataContext())
    {
        return dc.Plants.FirstOrDefault(x => x.Name == "someName");
    }
}

success: function(response){
    var info = response.d;
    $("#PlantName").val(info.Name);
    ...
},

1 Ответов

Рейтинг:
2

P_Z

Одна из причин, по которой Ajax-запрос может быть "медленным", заключается в том, что вы извлекаете объект Plant, а затем при сериализации Json весь граф объектов ex: Plant - > LinkToPlant также сериализуется. Таким образом, вы должны указать, что должно быть сериализовано ex:

//create a dynamic object and select fields
 var obj = 
{
   ID = plant.ID,
   Name = plant.Name
   OtherField = plant.LinkToPlant.SomeField
};
string plantJson = JsonConvert.SerializeObject(obj);



Что касается Ajax-кода, замените "failure" (кажется, он недействителен или, по крайней мере, я никогда о нем не слышал) на "error":

$.ajax({
            failure: function (r) {
                alert(r.d);
            }
        });

к
$.ajax({
            error: function (r) {
                alert(r.d);
            }
        });