ФорумПрограммированиеJavaScript → Синхронность

Синхронность

  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 5 июля 2010 г. 22:01

    Занимаюсь оптимизацией одного неприятного куска.

    Содержимое [var]<select>[/var] подгружается аяксом. Таких селектов довольно много, данные в них почти одинаковые. Человек, писавший это до меня делал по одному запросу на каждый такой селект [var]/getFoo/select/%selectname%[/var]. Этот запрос возвращал html вида: [var]<select name="%selectname%"><option> …[/var].

    Я решил возвращать JSON, запрос отправлять только один раз, на клиенте формировать html и тд. Получается код:

    this.prepareData(); // ajax-запрос, запись результата в статическое поле класса
    this.populateSelect('select1'); // наполняем select, учитываем различия
    this.populateSelect('select2');
    // …


    В чем проблема: populateSelect выполнится раньше, чем будут готовы результаты. Как быть?
    Спустя 237 сек.
    забиндиться на ajax.Success нельзя
    Спустя 72 сек.
    похоже буду что-то типа такого использовать http://stackoverflow.com/questions/843058/javascript-synchronization-options
    Спустя 99 сек.
    http://livehh.ru/sinev/entry/gore-ot-uma-ili-sinkhronizatsiya
    хм.. Интересно. Неужели все так просто?
  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz 5 июля 2010 г. 22:16, спустя 15 минут 15 секунд

    http://livehh.ru/sinev/entry/gore-ot-uma-ili-sinkhronizatsiya
    хм.. Интересно. Неужели все так просто?

    я, кстати, так делал, когда у меня было много всякой херни, которая грузится из разных мест
    Спустя 57 сек.
    пол ночи на это угрохал)))
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 5 июля 2010 г. 22:17, спустя 40 секунд

    Sinkler, ну по идее такое будет работать только если аякс-запросу выставлен параметр "синхронный" = труЪ?
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 5 июля 2010 г. 22:22, спустя 5 минут 8 секунд

    пиздец чо, зубри жс ептать
    Сапожник без сапог
  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz 5 июля 2010 г. 22:28, спустя 6 минут 5 секунд


    Sinkler, ну по идее такое будет работать только если аякс-запросу выставлен параметр "синхронный" = труЪ?
    разве?
    Спустя 56 сек.
    точно не знаю
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 6 июля 2010 г. 15:18, спустя 16 часов 50 минут 11 секунд

    ваще все разрешилось еще проще. Просто посылаю синхронный запрос и все, ыы
    Спустя 110 сек.
    вот с таким говоном приходится работать…
    	//Get attributes list by SET ID
    getAttributesForSet: function (name, insertTo, setid, aValue, width, specificKey, shippingName) {

    var url = getAttributesBySetUrl + 'setid/' + setid + '/select/' + name + '/width/' + width;
    new Ajax.Request(url, {
    method: 'post',
    onSuccess: function (transport) {

    if (transport.responseText != "end") {

    $(insertTo).innerHTML = transport.responseText;

    switch (name) {
    case 'use_reserve_from':
    AttributesActions.checkAttributesSelect(name, aValue);
    break;
    case 'use_price_from':
    AttributesActions.checkAttributesSelect(name, aValue);
    break;
    case 'use_now_from':
    AttributesActions.checkAttributesSelect(name, aValue);
    break;
    case 'select_attributes_for_qty':
    AttributesActions.checkAttributesSelect(name, aValue);
    break;
    case 'main_category_attribute':
    AttributesActions.checkAttributesSelect(name, aValue);
    break;
    case 'secondary_category_attribute':
    AttributesActions.checkAttributesSelect(name, aValue);
    break;
    case 'store_category_attribute':
    AttributesActions.checkAttributesSelect(name, aValue);
    break;
    case 'product_image_attribute':
    AttributesActions.checkAttributesSelect(name, aValue);
    break;
    case 'action_type_attribute':
    AttributesActions.checkAttributesSelect(name, aValue);
    break;
    case 'variation_price_from':
    AttributesActions.checkAttributesSelect(name, aValue);
    break;
    case 'attributes_for_variation_qty':
    AttributesActions.checkAttributesSelect(name, aValue);
    break;
    case 'weight_attribute_lbs':
    AttributesActions.checkAttributesSelect(name, aValue);
    break;
    case 'weight_attribute_oz':
    AttributesActions.checkAttributesSelect(name, aValue);
    break;
    case 'package_size_attribute':
    AttributesActions.checkAttributesSelect(name, aValue);
    break;
    case 'dimentions_attribute_width':
    AttributesActions.checkAttributesSelect(name, aValue);
    break;
    case 'dimentions_attribute_height':
    AttributesActions.checkAttributesSelect(name, aValue);
    break;
    case 'dimentions_attribute_depth':
    AttributesActions.checkAttributesSelect(name, aValue);
    break;
    case 'handling_feed_attribute':
    AttributesActions.checkAttributesSelect(name, aValue);
    break;
    case 'attributes_for_variation_qty':
    AttributesActions.checkAttributesSelect(name, aValue);
    break;
    default:
    break;
    }


    а как оно запускается:

    getAllAttributesForSet: function () {
    var setid = $('attribute_set').value;

    if (!setid) return;

    this.getAttributesForConfigurable();

    this.getTemplatesListsForSet(setid);

    this.getAttributesForSet('use_price_from', 'use_price_from_span', setid);
    this.getAttributesForSet('use_reserve_from', 'use_reserve_from_span', setid);
    this.getAttributesForSet('use_now_from', 'use_now_from_span', setid);
    this.getAttributesForSet('select_attributes_for_name', 'select_attributes_for_name_span', setid, 0, '150');
    this.getAttributesForSet('select_attributes_for_subtitle', 'select_attributes_for_subtitle_span', setid, 0, '150');
    this.getAttributesForSet('select_attributes', 'select_attributes_span', setid);
    this.getAttributesForSet('select_attributes_for_qty', 'select_attributes_for_qty_span', setid);
    this.getAttributesForSet('main_category_attribute', 'main_category_attribute_container', setid);
    this.getAttributesForSet('secondary_category_attribute', 'secondary_category_attribute_container', setid);
    this.getAttributesForSet('store_category_attribute', 'store_category_attribute_container', setid);
    this.getAttributesForSet('product_image_attribute', 'product_image_attribute_span', setid);
    this.getAttributesForSet('action_type_attribute', 'action_type_attribute_span', setid);
    this.getAttributesForSet('attributes_for_variation_qty', 'select_attributes_for_variation_qty_span', setid);
    this.getAttributesForSet('variation_price_from', 'use_variation_price_from_span', setid);

    for (var i = 0; i <= 30; i++) {

    try {

    AttributesActions.getAttributesForSet('attribute_custom_attribute_select_' + i, 'attribute_container_' + i, setid, 0, '', i, '');

    } catch (e) {
    break;
    }

    }

    },
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 6 июля 2010 г. 15:19, спустя 13 секунд

    Абырвалг, это не наш метод :)
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 6 июля 2010 г. 15:20, спустя 1 минуту 7 секунд

    я так и не понял, нахуя этот цикл из 30 итераций
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 6 июля 2010 г. 15:29, спустя 9 минут 33 секунды

    ооооооооооооооо!!! великолепный говнокод!!!!!
    Спустя 45 сек.

    я так и не понял, нахуя этот цикл из 30 итераций
    ну типа для 30 элементов судя по коу)
    Спустя 11 сек.
    *коду
    Спустя 10 сек.
    кос на пхп.ру - ты?
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 6 июля 2010 г. 15:43, спустя 14 минут 7 секунд

    да, я.

    ну типа для 30 элементов судя по коу)

    как бы да, но я не могу найти эти 30 элементов. Вообще [var]attribute_custom_attribute_select_[/var] нигде не упоминается кроме как в этом файле и еще одном шаблоне.

    Забавен тот факт, что придурок внутри блока [var]catch[/var] вставил [var]break[/var]. То есть он как бы надеялся прервать цикл, если что-то пойдет не так (и не делать больше запросов на серв.) Но вот наверно он не знал, что посылает асинхронные запросы, которые одновременно отправляются. Пиздец, я не удивлюсь, если он получает больше меня.
    Спустя 45 сек.
    это я еще бьютифиером причесал код, было хуже
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 6 июля 2010 г. 15:47, спустя 3 минуты 20 секунд

    Пиздец, я не удивлюсь, если он получает больше меня.

    так хули, ты же студентишка ебаный, вас за 10к на пачку можно покупать :D:D:D

    пхпнегр ыы)
    Спустя 35 сек.
    вчера слил проект одной компании ее же программисту, ибо заебала меня эта просьба "помочь", ух студент напрягся … чую уволится, он недавно к ним пришел :D
    Спустя 15 сек.
    bearman - я кстати;)
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 6 июля 2010 г. 15:52, спустя 5 минут

    bearman - я кстати;)

    норм. А то я думаю, что это за флудераст там появилсо)


    так хули, ты же студентишка ебаный, вас за 10к на пачку можно покупать :D:D:D

    он тоже студент (22-23 года), но учится в Германии.

    А я уже не студент! Через десять дней будет диплом бакланавра на руках.

    вчера слил проект одной компании ее же программисту, ибо заебала меня эта просьба "помочь", ух студент напрягся … чую уволится, он недавно к ним пришел :D

    а это не понял, поподробней
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 6 июля 2010 г. 15:57, спустя 4 минуты 53 секунды

    норм. А то я думаю, что это за флудераст там появилсо)

    да это я чутка решил потроллить

    он тоже студент (22-23 года), но учится в Германии.

    А я уже не студент! Через десять дней будет диплом бакланавра на руках.

    я бы даже с димпломом себя считал студентом, и сейчас считаю.

    а это не понял, поподробней

    да там проект ебаный, инет магазин, в котором никто нихуя не понимает, начиная от заказчика и "основателей" компании которая ведет проект, до реализаторов - конечных программистов кто делает, смех кароче)))

    просто начались обиды на меня в тему того, что мы не успеваем, стоим на месте и тп, ну я не придумал как мягко объяснить почему это происходит, а происходит это потому что задания даются в виде - сделать как у них, сам понимаешь это хуевый подход, ну вот я и передал их прогарммисту проект со словами, сделай как у них ))))))))))))))))
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 14 июля 2010 г. 16:40, спустя 8 дней 43 минуты

    еще на тему говна
    function mode_change()
    {
       var currentMode = $('mode').value;
       if (currentMode == '2'){

           $('custom_description_tr').style.display = '';
           $('custom_description_tr_2').style.display = '';
           $('custom_description_tr_3').style.display = '';
           $('custom_description_tr_4').style.display = '';

       }else{

           $('custom_description_tr').style.display = 'none';
           $('custom_description_tr_2').style.display = 'none';
           $('custom_description_tr_3').style.display = 'none';
           $('custom_description_tr_4').style.display = 'none';

       }

    }

    даже с прототайпом это можно более-менее пристойно сделать

    function mode_change()
    {
    var action = 2 == $('mode').value ? 'show' : 'hide';
    $('custom_description_tr', 'custom_description_tr_2', 'custom_description_tr_3', 'custom_description_tr_4').invoke(action);
    }


    а если б прототайповский .toggle поддерживал аргумент на входе, как jQuery - было б в одну строку.
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 16 июля 2010 г. 16:46, спустя 2 дня 6 минут

    	    	$('second_chance_offer_block').style.display = "none";

    $('best_offer_block_error').style.display = "";
    $('best_offer_block').style.display = "none";

    $('qty_template').readOnly = false;
    $('use_qty_attributes').style.display = '';
    $('durationId1').style.display='none';

    $('durationId3').style.display='none';
    $('durationId5').style.display='none';
    $('durationId7').style.display='none';
    $('durationId10').style.display='none';
    $('durationId30').selected='selected';

    $('durationId30').style.display='';
    $('durationId100').style.display='';
    $('item_qty_mode0').style.display='';
    $('item_qty_mode2').style.display='';
    $('item_qty_mode3').style.display='';

    if ($('accounts').value != ""){

    $('store_name_string_tr').style.display = '';
    $('warning_store_b').style.display = "none";
    StoreActions.storeGetFromTypeChange();
    $('storecategory_selected_type_tr').style.display = "";

    }


    сука сука сука!!! и такое гавно везде. Какой файл блять только ни открой с шаблоном - оно всюдууу! Ну как можно быть таким пидаром и так писать?

Пожалуйста, авторизуйтесь, чтобы написать комментарий!