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

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

17.04.2017, 20:00. Показов 1656. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru