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

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

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

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

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

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

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

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

7
0 / 0 / 4
Регистрация: 22.10.2015
Сообщений: 21
11.12.2015, 16:31 2
Функцию нужно вызвать:
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 3
Для объявления переменной всегда используй "var", это поможет избавится от неправильной работы скрипта, иногда бывает явных ошибок нет, и скрипт работает неправильно, а все потому что где то переменные объявлены с "var" а где то без "var"
0
181 / 149 / 55
Регистрация: 21.07.2013
Сообщений: 958
12.12.2015, 11:12  [ТС] 4
akula410, я хоть и в js не селен но ведь писал что как знаю с var локальные, а без глобальные переменные
0
1 / 1 / 2
Регистрация: 08.12.2015
Сообщений: 7
12.12.2015, 13:01 5
По поводу ключевого слова "var" - http://javascript.ru/var
Глобальная переменная - это переменная у которой область видимости - window.
Если переменную создать внутри функции то это уже локальная переменная, если внутри функции не подставить слово "var" то становится глобальной.
Что бы в этих понятиях не путаться в начале скрипта создавайте все глобальные переменные которые вы будете использовать с ключевым словом "var" можно не присваивать значения, а потом в функциях там где необходимо меняйте значения.
0
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
12.12.2015, 13:27 6
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
181 / 149 / 55
Регистрация: 21.07.2013
Сообщений: 958
12.12.2015, 21:38  [ТС] 7
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
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
12.12.2015, 23:02 8
Цитата Сообщение от 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
12.12.2015, 23:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.12.2015, 23:02
Помогаю со студенческими работами здесь

Вывести переменную из функции
на js месяца 2-3 как начал работать... пытался по всякому но еще никак не могу освоить данную...

Вытащить переменную из функции
Есть вот такая функция: setInterval(function() { var name = '<?= $_GET ?>'; var title =...

Вернуть переменную из функции
Здравстуйте $("#type_one").on('change', function n1(){ $('select...

Передать значение функции в переменную
Ребят, я в JS не особо силен, сильно не ругайте... Юзал инет - так и не нашел ответа.. Как передать...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru