Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.01.2015, 06:09
Аспирант
Отправить личное сообщение для Dtri Посмотреть профиль Найти все сообщения от Dtri
 
Регистрация: 14.12.2014
Сообщений: 86

Как передать объект в функцию.
Здравствуйте.

function f( type, url, data, arr)    {
       
        $.ajax({
                type: type,
                url: url,
                data: data,
                success: function (jsonVars) {
                    varForID = arr;   // при вызове должно быть: varForID = jsonVars.doctor;
                    alert(varForID);
                },
                complete: function()    {
                    $('#'+id).trigger('dropDownLoaded');
                }
        });
        return  varForID;
    }


вызываю функцию:
autocomleteRemovedArrWatcher('doctor', 'GET', '/getSecondParams', sendFormAb($('#serviceType_1').val()), arr);


не знаю что нужно написать в "arr", чтобы обратиться внутри объекта, который получаю от сервера, к элементу doctor.

при подстановке arr в
varForID = arr;

должно получиться
varForID = jsonVars.doctor;
Ответить с цитированием
  #2 (permalink)  
Старый 11.01.2015, 09:31
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Че сказал? Сам хоть понял?
Одно можно сказать - у тебя ошибка логическая:
Сообщение от Dtri
return varForID;
Ты пытаешься из функции вернуть значение, которое еще не успело придти с сервера (запрос к серверу идет очень долго, и поток исполнения кода не блокирует (асинхронно выполняется то есть), поэтому функция success выполняется позже функции f() )
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 11.01.2015, 11:18
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от danik.js
Одно можно сказать - у тебя ошибка логическая
Наверно, раз в день этот вопрос задают. Надоели уже
ЧаВО - часто задаваемые вопросы (faq)
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #4 (permalink)  
Старый 11.01.2015, 12:52
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от nerv_
Наверно, раз в день этот вопрос задают. Надоели уже
каждый в своей жизни должен создать тему с этим вопросом

Сообщение от nerv_
ЧаВО - часто задаваемые вопросы (faq)
если Gozar добавит этот вопрос в первый пост, то есть небольшая вероятность, что количество вопросов уменьшится,
а так там уже 8 страниц накапало (у меня по 20 постов на страницу), я бы не стал читать, вообще непонятна логика создания факов с х-евой тучей страниц без оглавления, по мне так любому должно быть влом хотя бы перелистать эти все страницы, даже не читая

Последний раз редактировалось bes, 11.01.2015 в 12:55.
Ответить с цитированием
  #5 (permalink)  
Старый 11.01.2015, 17:09
Аспирант
Отправить личное сообщение для Dtri Посмотреть профиль Найти все сообщения от Dtri
 
Регистрация: 14.12.2014
Сообщений: 86

вы не на то обратили внимание в посте. Но да ладно. Зато вы указали на ошибку в коде ту которую проглядел.
Вопрос был изначально в другом. Но уже нашёл решение.

jsonVars.doctor
можно заменить на
jsonVars['doctor']


и тогда 'doctor' можно передавать в функцию как строку.

function (Str) {
 jsionVars[Str]
}
Ответить с цитированием
  #6 (permalink)  
Старый 11.01.2015, 19:47
Аспирант
Отправить личное сообщение для Dtri Посмотреть профиль Найти все сообщения от Dtri
 
Регистрация: 14.12.2014
Сообщений: 86

function autocomleteRemovedArrWatcher(id, type, url, data, arr)  {
    var varForID;
    var arrObj;
    function f( type, url, data, arr)    {
        $.ajax({
                type: type,
                url: url,
                data: sendFormAb($(data).val()),
                async: false,
                success: function (jsonVars) {
                    //jsonVars[arr] instanceof Object?alert(sendFormAb(jsonVars[arr])):{}
                    if  (jQuery.type(jsonVars[arr]) !== 'object') {
                      varForID = jsonVars[arr]
                    } else  {
                        //alert([jsonVars[arr]].join('\n'))
                        var keys = new Array();
                        for (var key in jsonVars[arr]) {
                            keys.push(key);
                        }
                        varForID = keys;
                        arrObj = jsonVars[arr];
                    }
                },
                complete: function()    {
                    $('#'+id).trigger('dropDownLoaded');
                }
        });
        return  [varForID, arrObj]; // обратите внимание сюда
    }
    function f0()   {
        $('#'+id).focus();
    }
    function f1(id){
        if($('.autoCompleteInput_'+id).length==0) {
            $('<div class="autoCompleteInput autoCompleteInput_'+id+'"  style="width:'+(($('#'+id).width())*1+20*1)*1+'px;">').insertBefore('#'+id);
            $('#'+id).appendTo('.autoCompleteInput_'+id);
            $('#'+id).after('<div class="dropDownList dropDownList_'+id+'" style="width:'+$('#'+id).css('width')+';"></div>');
        }else    {
            $('.dropDownList_'+id).show();
        }
    }
    function f2(arr, id)   {
        $('.dropDown_'+id).remove();
        for (var i in arr)  {

            if  ((arr[i].indexOf($('#'+id).val())!==-1)&&(arr[i]!==''))  {
                $('.dropDownList_'+id).append('<div class="dropDown dropDown_'+id+'">'+arr[i]+'</div>');
            }
        }
    }
    function f3(id)    {
        $('.dropDown_'+id).on('mousedown', function(){
           $('#'+id).val( $(this).html()).trigger('changed');
           $('#'+id).trigger('inputDropDownClick');
        });
        $('#'+id).on('blur', function(){
            $('.dropDownList_'+id).hide();
        });
    }
    function f4(id)   {
        $('#'+id).on('inputDropDownClick', function(){
            $('.dropDownList_'+id).hide();
        });
    }
    function f5()   {
        $('#'+id).trigger('changed');
    }
    $('#'+id).on({
        click: function()   {
            f(type, url, data, arr);
        },
        dropDownLoaded: function()  {
            f1(id);
            f2(varForID, id);
            f3(id);
            f4(id);
            f0();
        },
        keyup: function()   {
            f1(id);
            f2(varForID, id);
            f3(id);
            f4(id);
            f5();
        }

    });
return  [varForID, arrObj]; // обратите внимание сюда    
}



autocomleteRemovedArrWatcher('service_2', 'GET', '/getFifthParams', '#serviceType_2', 'service');


не получается при обращении к функции получить этот arrObj

консоль пишет. arrObj is not defined. подскажите. что делаю непраильно или помогите ссылкой где прочитать?
Ответить с цитированием
  #7 (permalink)  
Старый 11.01.2015, 19:53
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от Dtri
вы не на то обратили внимание в посте. Но да ладно. Зато вы указали на ошибку в коде ту которую проглядел.
Сообщение от Dtri
return  [varForID, arrObj]; // обратите внимание сюда   
и зачем туда обращать внимание?
Ответить с цитированием
  #8 (permalink)  
Старый 11.01.2015, 20:10
Аспирант
Отправить личное сообщение для Dtri Посмотреть профиль Найти все сообщения от Dtri
 
Регистрация: 14.12.2014
Сообщений: 86

Сообщение от bes Посмотреть сообщение
и зачем туда обращать внимание?
чтобы легче было разобраться, в том что я спрашивать буду ниже.

я вышел из положения объявив переменные глобально к которым присваиваю результат внутри функций. Это помогло.

оказалось return вообще не нужен.

в данном вопросе. Как оно обычно и бывает. пока писал пост уже решил проблему)))

Но спасибо за внимание.

вот как выглядит код теперь. если интересно:

var arrObj;

function autocomleteRemovedArrWatcher(id, type, url, data, arr)  {
    var varForID;

    function f( type, url, data, arr)    {
        $.ajax({
                type: type,
                url: url,
                data: sendFormAb($(data).val()),
                async: false,
                success: function (jsonVars) {
                    //jsonVars[arr] instanceof Object?alert(sendFormAb(jsonVars[arr])):{}
                    if  (jQuery.type(jsonVars[arr]) !== 'object') {
                      varForID = jsonVars[arr]
                    } else  {
                        //alert([jsonVars[arr]].join('\n'))
                        var keys = new Array();
                        for (var key in jsonVars[arr]) {
                            keys.push(key);
                        }
                        varForID = keys;
                        arrObj = jsonVars[arr];
                    }
                },
                complete: function()    {
                    $('#'+id).trigger('dropDownLoaded');
                }
        });
    }
    function f0()   {
        $('#'+id).focus();
    }
    function f1(id){
        if($('.autoCompleteInput_'+id).length==0) {
            $('<div class="autoCompleteInput autoCompleteInput_'+id+'"  style="width:'+(($('#'+id).width())*1+20*1)*1+'px;">').insertBefore('#'+id);
            $('#'+id).appendTo('.autoCompleteInput_'+id);
            $('#'+id).after('<div class="dropDownList dropDownList_'+id+'" style="width:'+$('#'+id).css('width')+';"></div>');
        }else    {
            $('.dropDownList_'+id).show();
        }
    }
    function f2(arr, id)   {
        $('.dropDown_'+id).remove();
        for (var i in arr)  {

            if  ((arr[i].indexOf($('#'+id).val())!==-1)&&(arr[i]!==''))  {
                $('.dropDownList_'+id).append('<div class="dropDown dropDown_'+id+'">'+arr[i]+'</div>');
            }
        }
    }
    function f3(id)    {
        $('.dropDown_'+id).on('mousedown', function(){
           $('#'+id).val( $(this).html()).trigger('changed');
           $('#'+id).trigger('inputDropDownClick');
        });
        $('#'+id).on('blur', function(){
            $('.dropDownList_'+id).hide();
        });
    }
    function f4(id)   {
        $('#'+id).on('inputDropDownClick', function(){
            $('.dropDownList_'+id).hide();
        });
    }
    function f5()   {
        $('#'+id).trigger('changed');
    }
    $('#'+id).on({
        click: function()   {
            f(type, url, data, arr);
        },
        dropDownLoaded: function()  {
            f1(id);
            f2(varForID, id);
            f3(id);
            f4(id);
            f0();
        },
        keyup: function()   {
            f1(id);
            f2(varForID, id);
            f3(id);
            f4(id);
            f5();
        }
    });
}



вызов функции:
autocomleteRemovedArrWatcher('service_2', 'GET', '/getFifthParams', '#serviceType_2', 'service');


$('#service_1').on('blur', function () {
alert(arrObj[$('#service_1').val()]);
});
Ответить с цитированием
  #9 (permalink)  
Старый 11.01.2015, 20:11
Аспирант
Отправить личное сообщение для Dtri Посмотреть профиль Найти все сообщения от Dtri
 
Регистрация: 14.12.2014
Сообщений: 86

Если есть критика или замечания по оптимизации или другим ошибкам. буду благодарен если укажите.
Ответить с цитированием
  #10 (permalink)  
Старый 11.01.2015, 20:18
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от Dtri
чтобы легче было разобраться, в том что я спрашивать буду ниже.

я вышел из положения объявив переменные глобально к которым присваиваю результат внутри функций. Это помогло.

оказалось return вообще не нужен.
вообще-то тебе сразу сказали - логическая ошибка


Сообщение от Dtri
Если есть критика или замечания по оптимизации или другим ошибкам. буду благодарен если укажите.
без тестового кода, мало кому интересно, что ты там нагородил, твой пример - не тестовый код, может быть выдержка из него
тестовый пример - это когда запустил и что-то получил/не получил, если есть ошибки
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
как передать в функцию див imediasun1 Элементы интерфейса 2 14.11.2013 09:39
Flot Как передать переменную в функцию отрисовки точки на графике Ren jQuery 0 20.06.2012 14:16
jQuery (Как открыть объект в этом же окне, щёлкнув по нему мышкой) Объект кусок карты hadzhimuratov (X)HTML/CSS 32 18.06.2012 17:54
как найти нужный объект? `p r o x y jQuery 2 05.05.2009 01:12