изменение переменной в функции
День добрый
Вот при изменении примитивной переменной в функции, для функции создается копия переменной и изменяется именно она, а при работе с объектом - из функции уже доступ по указателю. По крайней мере в примерах так... Но вот у меня что-то не получается :( 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] та делать некуда) быть? |
ananax,
а вы смотрели что в data приходит? |
да, да...
в дата все есть. алерт внутри функции все хорошо показывает... нужное свойство объекта есть. а вот во внешней dat только старый объект, которым, типа, инициализировал... |
dat.result = eval('(' + data + ')');
так попробуйте |
в общем, вот
да бред какой-то...
в FF 3 не работает в FF 4b все работает как надо d хроме не работает в IE 6 все работает... :( |
Нагнал!!!!
В FF работает только если я оставляю alert() Если его убрать, все перестает работать |
значит что-то ты не правильно сделал, где-то переменную пытаешься получить ещё до того как пришёл ответ.
|
Ладно... хорошо...
Подскажите, тогда, пожалуйста, как мне вернуть data как строку из этой функции? Она выполняется, если jQuery.post получил данные и закончил их чтение. внутри функции я все данные вижу и могу их вывести и тд. А вот вынести их оттуда не могу :( не умею |
в общем, засада :(
Ладно... хорошо...
Подскажите, тогда, пожалуйста, как мне вернуть data как строку из этой функции? Она выполняется, если jQuery.post получил данные и закончил их чтение. внутри функции я все данные вижу и могу их вывести и тд. А вот вынести их оттуда не могу :( не умею |
$.post("image2.php",{},function(data){ dat.result = eval(data); alert(dat.result.strannie033); },'json'); тут то всё правильно, data будет содержать ответ, вот только видимо есть у вас места где вы пытаетесь получить dat.result да вот только не своевременно это. Могу и ошибаться |
Переделал на массив
var dat = ["a"]; $.post("image2.php",{},function(data){ dat["a"] = data; },'json'); alert(dat['a']); this.smileys=eval(dat["a"]); Без алерта не работает, хоть убей!!! С НИМ все работает!!! Народ!!! Научите, плиз, что не так делаю? как из функции изменить переменную? |
уххххх ты меня что не понимаешь?=)))
function(data){ dat["a"] = data; } - эта функция вызывается только тогда, когда приходит ответ от сервера this.smileys=eval(dat["a"]); - а это происходит тогда когда компилятор проходит про нему, то есть до того как придёт ответ от сервера, а алертом ты просто делаешь задержку, поэтому и без него не получается. |
Переделал на массив
var dat = ["a"]; $.post("image2.php",{},function(data){ dat["a"] = data; },'json'); alert(dat['a']); this.element=eval(dat["a"]); Теперь хочу передать просто строку и уже создать объект вне этой функции... Но со строкой тоже самое. без алерта эта конструкция попрежнему не работает :( |
мдаааа, у меня нет слов.
Вы читать умеете? |
ух...
Ну все.. развернуто объяснил и я все понял... :) получается, мне после этой строчки надо как-то сидеть и ждать, пока dat будет не undefined? Как это лучше сделать? |
нет просто выполняйте все действия с ответом в самой функции.
$.post("image2.php",{},function(data){ ВОТ ТУТ Выполняйте все действия с ответом, Можете вызвать другую функцию и передать ей данные },'json'); |
ммм... все работает...
но так понимаю, что если сервер затянет с ответом, то все... код, который использует дальше эти данные, может их не получить... а не знаете, есть ли возможность делать post в синхронном режиме? чтобы, либо отвалился с ошибкой, либо после получения ответа от сервера? |
ananax,
нет вы не правильно поняли просто браузер не ждёт пока придёт ответ, если запрос асинхронный (в синхронном ждёт), а компилирует дальше. |
вот вот...
переделываю на просто $.ajax там есть возможность заставить его работать в синхронном режиме. |
только в синхронном режиме, браузер будет зависать на время пока не придёт ответ от сервера.
|
Часовой пояс GMT +3, время: 09:10. |