Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   JSON. Как в callback функции изменить свойство объекта? (https://javascript.ru/forum/jquery/8964-json-kak-v-callback-funkcii-izmenit-svojjstvo-obekta.html)

master_alf 22.04.2010 16:22

JSON. Как в callback функции изменить свойство объекта?
 
<?php
echo '{
"foo": "SomeString"
}';
?>


myObj = new Object();
myObj.foo = "test";
var foo;
$.getJSON("php/json.php", "", function(json){
	 myObj.foo = json.foo;
	 foo = json.foo;
});
alert(myObj.foo);
alert(foo);
}

Не могу понять как можно изменить свойство myObj.foo через getJSON?
в переменной foo после получения данных содержится SomeString, а в myObj.foo - test :(

Kolyaj 22.04.2010 16:24

myObj = new  Object();
myObj.foo = "test";
var foo;
$.getJSON("php/json.php", "", function(json){
     myObj.foo = json.foo;
     foo = json.foo;
     alert(myObj.foo);
     alert(foo);
});
}

master_alf 22.04.2010 16:30

Не, это конечно работает. Но вопрос был не как получить алертом нужные значения, а как изменить в функции свойство объекта. Алерты я поставил, что бы отслеживать прошли ли изменения. Сами же свойства мною будут использоваться дальше. Так что, к сожалению, это решение не подходит.
Но, блин, порадовало. :haha:

Kolyaj 22.04.2010 16:49

Запрос-то асинхронный. Код выполняется не дожидаясь, когда ответ придёт.

micscr 22.04.2010 17:00

master_alf
Как подсказка, измените:
sleep(10);
echo '{
"foo": "SomeString"
}';

будет снова выдавать foo - "SomeString" ?

master_alf 22.04.2010 17:00

Как так? Данная функция обрабатывается когда приходит ответ от сервера.
Если вы про код ниже функции, то чем тогда объяснить то, что в переменной foo содержится правильное значение, полученное от сервера. А вот свойство объекта почему-то не изменяется. Скорее всего это как-то связано с областью видимости, но не могу ничего путнего нарыть.

micscr 22.04.2010 17:02

читать выше :nono:

master_alf 22.04.2010 17:03

Цитата:

Сообщение от micscr
master_alf
Как подсказка, измените:
показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
1 sleep(10);
2 echo '{
3 "foo": "SomeString"
4 }';

будет снова выдавать foo - "SomeString" ?

Нет, в данном случае получается undefined.
Но это не отменяет вопроса. Как мне сделать так, что бы по получению ответа от сервера, свойство объекта изменялось? Мне нужно работать с объектами не только внутри коллбэк функции. :(
Цитата:

Сообщение от micscr
читать выше

Когда нажал ответить - этого поста еще не было. Потому и не проверил сразу.

Kolyaj 22.04.2010 17:03

Цитата:

Сообщение от master_alf
чем тогда объяснить то, что в переменной foo содержится правильное значение, полученное от сервера.

Пока вы в первом alert на OK нажимаете, ответ от сервера уже пришёл.

Kolyaj 22.04.2010 17:04

Цитата:

Сообщение от master_alf
Как мне сделать так, что бы по получению ответа от сервера, свойство объекта изменялось?

Оно меняется. Но проверяете вы его до того, как оно изменилось.


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