Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   изменение переменной в функции (https://javascript.ru/forum/misc/14348-izmenenie-peremennojj-v-funkcii.html)

ananax 12.01.2011 09:21

изменение переменной в функции
 
День добрый
Вот при изменении примитивной переменной в функции, для функции создается копия переменной и изменяется именно она, а при работе с объектом - из функции уже доступ по указателю.
По крайней мере в примерах так...
Но вот у меня что-то не получается :(
var dat = new Object();
        dat.result = {a:"str"};
        $.post("image2.php",{},function(data){
            dat.result = eval(data);
            alert(dat.result.strannie033);
        },'json');
        alert(dat.result.a);

переменная dat не изменяется...

Подскажите, как можно в моем случае [(B]return[/b] та делать некуда) быть?

Skipp 12.01.2011 09:30

ananax,
а вы смотрели что в data приходит?

ananax 12.01.2011 09:32

да, да...
в дата все есть.
алерт внутри функции все хорошо показывает... нужное свойство объекта есть.
а вот во внешней dat только старый объект, которым, типа, инициализировал...

Skipp 12.01.2011 09:48

dat.result = eval('(' + data + ')');

так попробуйте

ananax 12.01.2011 10:07

в общем, вот
 
да бред какой-то...
в FF 3 не работает
в FF 4b все работает как надо
d хроме не работает
в IE 6 все работает... :(

ananax 12.01.2011 10:17

Нагнал!!!!
В FF работает только если я оставляю alert()
Если его убрать, все перестает работать

Skipp 12.01.2011 10:29

значит что-то ты не правильно сделал, где-то переменную пытаешься получить ещё до того как пришёл ответ.

ananax 12.01.2011 10:47

Ладно... хорошо...

Подскажите, тогда, пожалуйста, как мне вернуть data как строку из этой функции?
Она выполняется, если jQuery.post получил данные и закончил их чтение.
внутри функции я все данные вижу и могу их вывести и тд.
А вот вынести их оттуда не могу :( не умею

ananax 12.01.2011 10:47

в общем, засада :(
 
Ладно... хорошо...

Подскажите, тогда, пожалуйста, как мне вернуть data как строку из этой функции?
Она выполняется, если jQuery.post получил данные и закончил их чтение.
внутри функции я все данные вижу и могу их вывести и тд.
А вот вынести их оттуда не могу :( не умею

Skipp 12.01.2011 10:52

$.post("image2.php",{},function(data){
            dat.result = eval(data);
            alert(dat.result.strannie033);
        },'json');

тут то всё правильно, data будет содержать ответ, вот только видимо есть у вас места где вы пытаетесь получить dat.result да вот только не своевременно это. Могу и ошибаться

ananax 12.01.2011 10:53

Переделал на массив
var dat = ["a"];
$.post("image2.php",{},function(data){
dat["a"] = data;
},'json');
alert(dat['a']);
this.smileys=eval(dat["a"]);


Без алерта не работает, хоть убей!!!
С НИМ все работает!!!
Народ!!! Научите, плиз, что не так делаю? как из функции изменить переменную?

Skipp 12.01.2011 11:03

уххххх ты меня что не понимаешь?=)))
function(data){
dat["a"] = data;
} - эта функция вызывается только тогда, когда приходит ответ от сервера
this.smileys=eval(dat["a"]); - а это происходит тогда когда компилятор проходит про нему, то есть до того как придёт ответ от сервера, а алертом ты просто делаешь задержку, поэтому и без него не получается.

ananax 12.01.2011 11:13

Переделал на массив
var dat = ["a"];
        $.post("image2.php",{},function(data){
            dat["a"] = data;
        },'json');
        alert(dat['a']);
        this.element=eval(dat["a"]);


Теперь хочу передать просто строку и уже создать объект вне этой функции...
Но со строкой тоже самое. без алерта эта конструкция попрежнему не работает :(

Skipp 12.01.2011 11:17

мдаааа, у меня нет слов.
Вы читать умеете?

ananax 12.01.2011 11:29

ух...
Ну все.. развернуто объяснил и я все понял... :)
получается, мне после этой строчки надо как-то сидеть и ждать, пока dat будет не undefined?
Как это лучше сделать?

Skipp 12.01.2011 11:31

нет просто выполняйте все действия с ответом в самой функции.

$.post("image2.php",{},function(data){
ВОТ ТУТ Выполняйте все действия с ответом,
Можете вызвать другую функцию и передать ей данные
},'json');

ananax 12.01.2011 11:39

ммм... все работает...
но так понимаю, что если сервер затянет с ответом, то все...
код, который использует дальше эти данные, может их не получить...
а не знаете, есть ли возможность делать post в синхронном режиме?
чтобы, либо отвалился с ошибкой, либо после получения ответа от сервера?

Skipp 12.01.2011 11:48

ananax,
нет вы не правильно поняли просто браузер не ждёт пока придёт ответ, если запрос асинхронный (в синхронном ждёт), а компилирует дальше.

ananax 12.01.2011 11:53

вот вот...
переделываю на просто $.ajax
там есть возможность заставить его работать в синхронном режиме.

Skipp 12.01.2011 12:09

только в синхронном режиме, браузер будет зависать на время пока не придёт ответ от сервера.


Часовой пояс GMT +3, время: 09:10.