Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 17.04.2017
Сообщений: 6

Не получается присвоить значение переменной в функции

17.04.2017, 20:00. Показов 1683. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Недавно начал изучать Ajax, но без помощи JQuery. Есть вот такая функция:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
function ajaxGet(url, params, callback) {
    var request = new XMLHttpRequest();
    var f = callback || function(data){};
    request.onreadystatechange = function () {
        if (request.readyState == 4 && request.status == 200) {
             f(request.responseText);
        }
    };
    request.open('POST', url);
    request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    request.send(params);
}
Также имеется вот такой код:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
var val;
document.querySelector("#nickname").oninput = function() { //по обновлению поля, где вводится никнейм
    var params = 'name=' + document.querySelector('#nickname').value;
    ajaxGet("/pages/admin/search.php", params,function(data) {
        var res = document.querySelector("#result").innerHTML;
        if (data == "0")
        {
            res = "Пользователь не найден";
            document.querySelector("#uinfo").innerHTML = "";
        }
        else if (data == "-1")
        {
            res = "Внутренняя ошибка";
            document.querySelector("#uinfo").innerHTML = "";
        }
        else
        {
            //data = id пользователя
            res = "";
            for (var i = 0; i<=2; i++) {
                var field;
                switch (i)
                {
                    case 0: field="name"; break;
                    case 1: field="pass"; break;
                    case 2: field="money"; break;
                    //и т.д.
                }
                var params2 = 'num=' + data + '&field=' + field;
                ajaxGet("/pages/admin/getfield.php",params2,function(data2) {window.val = data2;});
                document.querySelector("#uinfo").innerHTML += '<p style="margin-top:5px;">' + field + ' = ' + '<input name = "' + field + '" id = "' + field + '" value="' + window.val + '"></p>';
                //выводит undefined вместо val       
            }
        }
        document.querySelector("#result").innerHTML = res;
    });
};
Думаю, понятно: суть заключается в том, чтобы по требуемому полю ("name"/"pass"/"money") вывести результат из файла getfield.php (там обращение к БД). Проблема состоит в том, что вне функции ajaxGet (которая вложенная) переменная val = undefined, хотя если вывести val внутри этой функции, всё будет нормально.
Переменную val пробовал объявлять в разных местах, разными способами - не помогло. Ставить же вывод внутрь функции - не вариант.
Что, собственно, посоветуете сделать? Заранее спасибо!)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.04.2017, 20:00
Ответы с готовыми решениями:

не получается присвоить переменной значение
Добрый вечер! Такая проблемка, пытаюсь присвоить строковое значение переменной, на выходе получаю NULL, почему так? public function...

Не получается присвоить переменной значение в виде текста (символов)
Не получается присвоить переменной значение в виде текста (символов). Может я не понимаю как и какие кавычки ставить Заранее спасибо за...

Не получается присвоить значение указателя в функции
void Gauss(double *x,double b) { for (int i = n-1; i &gt;0 ; i--) { *x=0; for (int j = n; j &lt; i; j--) { *x+=-*x*A; } ...

4
Эксперт HTML/CSS
 Аватар для Shakalaka
653 / 556 / 322
Регистрация: 27.01.2015
Сообщений: 1,374
17.04.2017, 20:53
JavaScript
1
2
3
ajaxGet("/pages/admin/getfield.php",params2,function(data2) {window.val = data2;});
document.querySelector("#uinfo").innerHTML += '<p style="margin-top:5px;">' + field + ' = ' + '<input name = "' + field + '" id = "' + field + '" value="' + window.val + '"></p>';
//выводит undefined вместо val
Вы отправляете асинхронный запрос, когда запрос отправлен код продолжает исполняться, поэтому вывод переменной window.val происходит до того, как будет получен ответ от сервера и этой самой window.val будет присвоено значение
Цитата Сообщение от DevilishSkull Посмотреть сообщение
Ставить же вывод внутрь функции - не вариант.
Это самый простой вариант
1
0 / 0 / 0
Регистрация: 17.04.2017
Сообщений: 6
17.04.2017, 21:01  [ТС]
Дело в том, что если ставить вывод внутри функции, то выводится всегда результат какого-то одного и того же запроса (например запрос с полем pass)
0
Эксперт HTML/CSS
 Аватар для Shakalaka
653 / 556 / 322
Регистрация: 27.01.2015
Сообщений: 1,374
17.04.2017, 23:19
Лучший ответ Сообщение было отмечено DevilishSkull как решение

Решение

Цитата Сообщение от DevilishSkull Посмотреть сообщение
то выводится всегда результат какого-то одного и того же запроса
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
for (var i = 0; i<=2; i++) {
    (function(i){
        var field;
    switch (i)
    {
      case 0: field="name"; break;
      case 1: field="pass"; break;
      case 2: field="money"; break;
      //и т.д.
    }
    var params2 = 'num=' + data + '&field=' + field;
    ajaxGet("/pages/admin/getfield.php",params2,function(data2) {
 
       window.val = data2;
       document.querySelector("#uinfo").innerHTML += '<p style="margin-top:5px;">' + field + ' = ' + '<input name = "' + field + '" id = "' + field + '" value="' + window.val + '"></p>';
    });
   
 
    })(i)   
}
1
0 / 0 / 0
Регистрация: 17.04.2017
Сообщений: 6
18.04.2017, 07:37  [ТС]
Огромное спасибо!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.04.2017, 07:37
Помогаю со студенческими работами здесь

Как присвоить значение переменной из функции?
Я пытаюсь передать в переменную y результат работы getJSON - т.е. val. Как мне это сделать? Код рабочий, alert(val) показывает. ...

Как присвоить возвращаемое значение функции переменной?
double sine(int index, int frequency) { return (100*sin(index*frequency)); } вопрос: как присвоить возвращаемое значение...

Возвращаемое значение функции присвоить значению переменной
Здравствуйте! Подскажите как мне полученное значение функции присвоить к значению переменной, т.е. int summ = ololo(&quot;SELECT SUM...

Присвоить значение наименьшего элемента массива переменной М1, номер строки, где находится этот элемент, - переменной Т, номер столбца - переменной С
Массив С действительных чисел имеет 5 строк и 11 столбцов. Присвоить значение наименьшего элемента массива переменной М1, номер строки, где...

Как присвоить значение переменной, исходя из значения другой переменной?
Всем привет. Нужна помощь. Есть переменная, например &quot;month&quot; которая может принимать значения от 01 до 12, и переменная...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru