2010-10-25 3 views
0

Возможно, я ошибаюсь в том, что на самом деле происходит здесь, но у меня есть 3 Html.dropdownlists. И im использует jquery для обработки фильтрации, которая действительно работает. Тем не менее, существует некоторое нечетное поведение, которое, я думаю, может быть связано с тем, что данные не заканчиваются загрузкой до вызова следующей функции.JQuery: принудительная страница останавливается, пока данные не будут завершены. Загрузка

Например,:

Некоторые фон. Компания: владеет несколькими отделениями на местах Полевое отделение: имеет несколько возможностей Так логично, когда вы меняете компанию, отделения на местах должны меняться, что затем меняет объекты.

$(function() { 
     $(document).ready(function() { 
      var cid = $("#CompanyId").val(); 
      $.post("/ManifestSearch/GetFilteredFieldOffices", { id: cid }, function (data) { 
       $("#FieldOfficeId").loadSelect(data); 
      }); 
      var fid = $("#FieldOfficeId").val(); 
      $.post("/ManifestSearch/GetFilteredFacilities", { id: fid }, function (data) { 
       $("#FacilityId").loadSelect(data); 
      }); 
     }); 
    }); 

Теперь, когда страница загружается, все выглядит нормально. Все выпадающие списки имеют правильные данные.

Когда я меняю компанию, это вызывает.

$(function() { 
     $('#CompanyId').change(function() { 
      var cid = $(this).val(); 
      $.post("/ManifestSearch/GetFilteredFieldOffices", { id: cid }, function (data) { 
       $("#FieldOfficeId").loadSelect(data); 
      }); 
      var fid = $("#FieldOfficeId").val(); 
      $.post("/ManifestSearch/GetFilteredFacilities", { id: fid }, function (data) { 
       $("#FacilityId").loadSelect(data); 
      }); 
     }); 
    }); 

Это меняет отделений на местах в соответствующий список, однако объекты изменения в любые отделения на местах был установлен до изменения компании произошло. Я не знаю достаточно о jquery, чтобы точно выяснить, что происходит, но мой инстинкт подсказывает мне, что оба сообщения происходят одновременно, а второе сообщение происходит до того, как первый закончен.

ответ

2

Это характер асинхронного запроса .. вы не знаете, в каком порядке они будут закончены, чтобы вы не всегда могли предположить, что данные из первого будут доступны для второго.

В идеале ваш второй запрос должен быть в функции обратного вызова onSuccess первого запроса с обработчиком функции onFailure/onError, чтобы заботиться о любых возникающих проблемах.

+0

Я видел где-то, что вы можете установить асинхронное значение false. Это правда? –

+0

Получил это. Я поставил второй вызов контроллера внутри успеха первого. Благодаря! –

+0

Также обратите внимание - есть плагины jQuery, которые отправляют запросы ajax в очереди. Я лично использовал и пользовался http://www.protofunc.com/scripts/jquery/ajaxManager/ – Jono

 Смежные вопросы

  • Нет связанных вопросов^_^