Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
 Аватар для prudkiy
181 / 149 / 55
Регистрация: 21.07.2013
Сообщений: 958

Изменить переменную в функции

10.12.2015, 21:35. Показов 4957. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго всем вечера.
Как знаю глобальная переменная объявляется просто без "var"
Но вот так изменить ее не выходит.
Функция вызывается от приема данных от ajax
Данные приходят точно и верные.
В функции alert говорит что надо
но за функцией без изменений.
JavaScript
1
2
3
4
5
6
thisIdUser = '';      
function thisIdUserFun(data,d){
thisIdUser = data;
alert(thisIdUser)
}
alert(thisIdUser)
не судите строго, в js я не очень
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.12.2015, 21:35
Ответы с готовыми решениями:

В теле функции изменить глобальную переменную
Добрый день! Имеется файл main.js в котором объявлена глобальная (?) переменная data, и функция...

Как передать переменную окна через текстовую переменную?
Открыл одно окно, потом второе, и хочу передать индетефикатор первого окна во второе, чтобы оно там...

Переменную js в php переменную
Подскажите, как передать переменную js в php-переменную. Нагуглил много чего, но все не помогает....

7
0 / 0 / 4
Регистрация: 22.10.2015
Сообщений: 21
11.12.2015, 16:31
Функцию нужно вызвать:
JavaScript
1
2
3
4
5
6
7
thisIdUser = '';
function thisIdUserFun(data,d){
thisIdUser = data;
alert(thisIdUser)
}
thisIdUserFun('foo', 'bar'); //тут
alert(thisIdUser)//foo
0
1 / 1 / 2
Регистрация: 08.12.2015
Сообщений: 7
11.12.2015, 23:45
Для объявления переменной всегда используй "var", это поможет избавится от неправильной работы скрипта, иногда бывает явных ошибок нет, и скрипт работает неправильно, а все потому что где то переменные объявлены с "var" а где то без "var"
0
 Аватар для prudkiy
181 / 149 / 55
Регистрация: 21.07.2013
Сообщений: 958
12.12.2015, 11:12  [ТС]
akula410, я хоть и в js не селен но ведь писал что как знаю с var локальные, а без глобальные переменные
0
1 / 1 / 2
Регистрация: 08.12.2015
Сообщений: 7
12.12.2015, 13:01
По поводу ключевого слова "var" - http://javascript.ru/var
Глобальная переменная - это переменная у которой область видимости - window.
Если переменную создать внутри функции то это уже локальная переменная, если внутри функции не подставить слово "var" то становится глобальной.
Что бы в этих понятиях не путаться в начале скрипта создавайте все глобальные переменные которые вы будете использовать с ключевым словом "var" можно не присваивать значения, а потом в функциях там где необходимо меняйте значения.
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
12.12.2015, 13:27
prudkiy, Проблема в асинхронности. Смотрите, что происходит:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
// 1. Объявили переменную
var thisIdUser = 'ABC';
// 2. Выполняете ajax-запрос, скорее всего, что асинхронный
//  и результат присваиваем переменной 
$.ajax({
    success: function(data){
        thisIdUser = data;
    }
});
// 3. Запрос еще не завершен, а сценарий выполняется дальше 
// и выводит вам значение переменной
alert(thisIdUser); // ABC
// Но т.к. запрос еще не завершен, значение переменной не изменилось
Есть несколько вариантов решения данной задачи:
1. Сделать ajax-запрос синхронным. Решение, мягко говоря, не самое удачное, но иногда и без него не обойтись.
2. Использовать "Обещания" (Promise). В jQuery, для таких операций есть объект $.Deferred
3. После завершения запроса, вызывать функцию, где должна использоваться переменная с измененным значением.
Выбор за вами. Могу еще поделиться ссылкой на статью по этой теме
0
 Аватар для prudkiy
181 / 149 / 55
Регистрация: 21.07.2013
Сообщений: 958
12.12.2015, 21:38  [ТС]
Lazy_Den а почему еще не завершен.
Ведь в success указывается функция которая выполниться после завершения запроса и получнеия ответа. В data ведь этот ответ и помещается.
JavaScript
1
2
3
function(data){
        thisIdUser = data;
    }
Что вот заметил
Если писать так
JavaScript
1
2
3
4
5
6
7
8
9
myVar = 'var';
 
function test(){
myVar = 'new var';
}
 
test()
 
alert(myVar);
то переменная изменяется
Но вот если так
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
myVar = 'var';
 
function test(){
$.ajax({
    success: function(data){
        myVar = 'new var';
    }
});
}
 
test()
 
alert(myVar);
то нет (
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
12.12.2015, 23:02
Цитата Сообщение от prudkiy Посмотреть сообщение
а почему еще не завершен
Вопрос не правильный. Сколько может продолжаться ваш запрос? Иногда пару миллисекунд, секунду, а иногда пару секунд. Но даже, если запрос выполняется всего пару миллисекунду, то этого уже достаточно для того, чтоб вы не получили результат, который ожидали. Вот пример:
JavaScript
1
2
3
4
5
6
7
var a = 'ABC';
function foo() {
    a = 'DEF';
    console.log('Inside the function: ' + a); // Inside the function: DEF
}
foo();
console.log('Outside function: ' + a); // Outside function: DEF
JavaScript
1
2
3
4
5
6
7
8
9
var a = 'ABC';
function foo() {
    setTimeout(function() {
        a = 'DEF';
        console.log('Inside the function: ' + a); // Inside the function: DEF
    }, 1);
}
foo();
console.log('Outside function: ' + a); // Outside function: ABC
В отличии от того же PHP, где, образно говоря, следующая строчка кода не начнет выполнятся до того, как предыдущая не закончит выполнение, тут - в JS - дело обстоит иначе.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.12.2015, 23:02
Помогаю со студенческими работами здесь

Изменить переменную в элементе div
Имеется например такое <div class='Player' spTitle='Фарго' spWidth='1050'></div> Можно ли как...

Изменить переменную php на лету
Народ , подскажите, на странице есть Селект , выбор города. При выборе одного города, меняется...

Не могу изменить переменную ХР при нажатие на кнопку "ydar"
Не могу изменить переменную ХР, при нажатие на кнопку "ydar". Объявлена вне функции.

Изменить переменную и вызвать функцию с новым значением переменной
Здравствуйте. Есть такой код: jQuery(document).ready(function slider(){ var sc=$(".slider...

И снова глобальная переменная в js. Как изменить значение глобальной переменной в одной функции и увидеть это значение в другой функции?
Это учебное задание. Помогите, пожалуйста, разобраться почему func1 видит какую-то новую переменную...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой
Programma_Boinc 10.04.2026
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой Если на Windows стоит дискретная NVIDIA или AMD — можно отдать её вычислительную мощность реальным исследованиям. . . .
Очистка реквизитов документа при копировании
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
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru