2013-06-16 3 views
0

У меня есть форма, где я загружаю элементы меню выбора с помощью ajax. Но есть также опция, которая заполняет все варианты с помощью функции change(). Но так как нужно дождаться выполнения запроса ajax, мне нужно установить интервал, который будет отличаться каждый раз, поэтому я не могу использовать его таким образом.Получение .done() запроса от другой функции

window.setTimeout(function() { 
    $("#car_brand").val(vehicle.brand).change(); 
}, 100); 

Так что это изменяет значение #car_brand и car_brand загружает все параметры из базы данных, когда она будет изменена. Поэтому, если я не устанавливаю другой интервал, он пытается изменить его без загрузки новых параметров. Есть ли способ использования .done() запроса ajax здесь?

Ajax запрос

function updateField(str, id, prevvalue, value, vehicletype){ 
    $.ajax({ 
     type: "get", 
     url: "inc/ajax/form_rest.php", 
     data: { q:str, prevvalue:prevvalue, value:value, vehicletype:vehicletype }, 
     success: function(html) { 
        $('#'+id).html(html); 
       } 
     }) 
     .done(function(){ 
      $("#"+id).removeAttr("disabled"); 
     }); 
} 

Всего изменение функции

function returnVehicleByValue(vehicleValue, vozila){ 
    $.get("inc/ajax/selectMojaVozila.php", 
     {vehicleValue:vehicleValue}, 
     function(html){ 
      var vehicle = html; 
      //Select Moja Vozila 
       $("#"+vozila+"_year").val(vehicle.Year).change() 
       window.setTimeout(function() { 
        $("#"+vozila+"_brand").val(vehicle.Marke_vozila).change(); 
       }, 100); 
       window.setTimeout(function() { 
        $("#"+vozila+"_model").val(vehicle.Model_vozila).change(); 
       }, 350); 

       window.setTimeout(function() { 
        $("#"+vozila+"_type").val(vehicle.Tip_vozila).change(); 
       }, 500); 
       window.setTimeout(function() { 
        $("#"+vozila+"_uitvoering").val(vehicle.izvedba_vozila).change(); 
       }, 700); 
     }, 'json' 
    ); 
} 
+0

Итак, каждый выбор загружает свои параметры через ajax? Не могли бы вы запустить предыдущий триггер следующего? поэтому в _year ajax это вызвало изменение _brand? и в _brand ajax он вызывает изменение модели? – chrislondon

+0

Хм, я думаю, что это не сработает, потому что мне нужно использовать функцию updateField для других целей. Но, возможно, я мог бы добавить еще один параметр внутри updateField в функцию done(), и когда он будет установлен, он изменит значение следующего выбора. И добавьте функцию updateField внутри returnVehicleByValue ... Пока не знаю, как именно я собираюсь это сделать, но я собираюсь попробовать –

+0

Я не понимаю, зачем вам нужны все эти произвольные таймауты? Почему вы не можете запускать все события изменений сразу? – chinnychinchin

ответ

0

Если я отслеживаю Ваш вопрос правильно, вы можете использовать complete обработчик для метода АЯКС:

function updateField(str, id, prevvalue, value, vehicletype){ 
    $.ajax({ 
     type: "get", 
     url: "inc/ajax/form_rest.php", 
     data: { q:str, prevvalue:prevvalue, value:value, vehicletype:vehicletype }, 
     success: function(html) { 
        $('#'+id).html(html); 
       }, 
     complete: function() { 
      $("#car_brand").val(vehicle.brand).change(); 
      //all your code 

     } 
     }) 
     .done(function(){ 
      $("#"+id).removeAttr("disabled"); 
     }); 
} 

Полный обратный вызов срабатывает после success и error обратные вызовы. См. Здесь: http://api.jquery.com/jQuery.ajax/

+0

Приятно иметь в виду, но это не совсем так, как я хотел. Я отказался от этого и сделал это иначе. Спасибо, в любом случае! –

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