11.01.2015, 06:09
|
Аспирант
|
|
Регистрация: 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;
|
|
11.01.2015, 09:31
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Че сказал? Сам хоть понял?
Одно можно сказать - у тебя ошибка логическая:
Сообщение от Dtri
|
return varForID;
|
Ты пытаешься из функции вернуть значение, которое еще не успело придти с сервера (запрос к серверу идет очень долго, и поток исполнения кода не блокирует (асинхронно выполняется то есть), поэтому функция success выполняется позже функции f() )
__________________
В личку только с интересными предложениями
|
|
11.01.2015, 11:18
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от danik.js
|
Одно можно сказать - у тебя ошибка логическая
|
Наверно, раз в день этот вопрос задают. Надоели уже
ЧаВО - часто задаваемые вопросы (faq)
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
11.01.2015, 12:52
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Сообщение от nerv_
|
Наверно, раз в день этот вопрос задают. Надоели уже
|
каждый в своей жизни должен создать тему с этим вопросом
Сообщение от nerv_
|
ЧаВО - часто задаваемые вопросы (faq)
|
если Gozar добавит этот вопрос в первый пост, то есть небольшая вероятность, что количество вопросов уменьшится,
а так там уже 8 страниц накапало (у меня по 20 постов на страницу), я бы не стал читать, вообще непонятна логика создания факов с х-евой тучей страниц без оглавления, по мне так любому должно быть влом хотя бы перелистать эти все страницы, даже не читая
Последний раз редактировалось bes, 11.01.2015 в 12:55.
|
|
11.01.2015, 17:09
|
Аспирант
|
|
Регистрация: 14.12.2014
Сообщений: 86
|
|
вы не на то обратили внимание в посте. Но да ладно. Зато вы указали на ошибку в коде ту которую проглядел.
Вопрос был изначально в другом. Но уже нашёл решение.
jsonVars.doctor
можно заменить на
jsonVars['doctor']
и тогда 'doctor' можно передавать в функцию как строку.
function (Str) {
jsionVars[Str]
}
|
|
11.01.2015, 19:47
|
Аспирант
|
|
Регистрация: 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. подскажите. что делаю непраильно или помогите ссылкой где прочитать?
|
|
11.01.2015, 19:53
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Сообщение от Dtri
|
вы не на то обратили внимание в посте. Но да ладно. Зато вы указали на ошибку в коде ту которую проглядел.
|
Сообщение от Dtri
|
return [varForID, arrObj]; // обратите внимание сюда
|
и зачем туда обращать внимание?
|
|
11.01.2015, 20:10
|
Аспирант
|
|
Регистрация: 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()]);
});
|
|
11.01.2015, 20:11
|
Аспирант
|
|
Регистрация: 14.12.2014
Сообщений: 86
|
|
Если есть критика или замечания по оптимизации или другим ошибкам. буду благодарен если укажите.
|
|
11.01.2015, 20:18
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Сообщение от Dtri
|
чтобы легче было разобраться, в том что я спрашивать буду ниже.
я вышел из положения объявив переменные глобально к которым присваиваю результат внутри функций. Это помогло.
оказалось return вообще не нужен.
|
вообще-то тебе сразу сказали - логическая ошибка
Сообщение от Dtri
|
Если есть критика или замечания по оптимизации или другим ошибкам. буду благодарен если укажите.
|
без тестового кода, мало кому интересно, что ты там нагородил, твой пример - не тестовый код, может быть выдержка из него
тестовый пример - это когда запустил и что-то получил/не получил, если есть ошибки
|
|
|
|