11.07.2014, 23:41
|
Новичок на форуме
|
|
Регистрация: 11.07.2014
Сообщений: 1
|
|
ребят помогите, по любому возвращает undefined, хатя значени в самой функции верни
ребят помогите, по любому возвращает undefined, хатя значени в самой функции верни, почему? как можно это исправить и вчём причина?
Код JavaScript
var lang;
function GetURLArgument(arg){
$.post("url_arguments.php", { com: "GET_ARGUMENT", arg_post: arg})
.done(function(data) {
if(arg==="lang") lang = data;
return data;
});
}
lang = GetURLArgument("lang")
Добавлено через 7 часов 54 минуты
пробовал и по другому, например так
var url_arguments = new Object();
url_arguments.lang = "ru";
function GetURLArgument(arg, arg_val){
$.post("url_arguments.php", { com: "GET_ARGUMENT", arg_post: arg})
.done(function(data) {
if(arg==="lang") arg_val.lang = data;
return data;
});
}
GetURLArgument("lang", url_argument);
все равно значении меняется только локально
|
|
12.07.2014, 07:13
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Потому что ajax-запросы выполняются асинхронно. Сначала выполняется функция GetURLArgument, которая приказывает браузеру делать запрос и устанавливает функцию-коллбек, что должна выполниться по возвращении ответа, и только потом, когда ответ приходит, выполняется эта самая функция-коллбек. Выполняй все необходимые тебе действия в коллбеке, ну либо выполняй запрос синхронно, что очень нежелательно (ибо браузер на время ожидания ответа повиснет).
|
|
12.07.2014, 09:58
|
Профессор
|
|
Регистрация: 16.03.2010
Сообщений: 1,618
|
|
Сообщение от Erolast
|
Потому что ajax-запросы выполняются асинхронно.
|
Тут даже более общая проблема. Если ты передаешь аргументом в функцию foo функцию bar, это не значит, что функция foo вернёт то, что возвращает функция bar:
var x = foo(function bar() {
return "value";
});
x == "value"; // может и равно, а может и нет
Т.е. важно понимать, что если одна функция что-то возвращает, то меньше всего это означает, что и другая функция вернёт то же.
|
|
13.07.2014, 15:01
|
Профессор
|
|
Регистрация: 10.07.2014
Сообщений: 145
|
|
Сообщение от Sweet
|
Тут даже более общая проблема.
|
думаю, проблемы тут никакой нет. Все зависит от реализации foo
x=foo(function() {
return "value";
});
y=bar(function() {
return "value";
});
console.log(x=="value", y=="value")//true false
function foo(bar){return bar()}
function bar(bar){bar()}
|
|
13.07.2014, 15:13
|
Профессор
|
|
Регистрация: 16.03.2010
Сообщений: 1,618
|
|
newobject, ты вообще не понял, что я написать. Мысль в том и была, что "всё зависит от реализации".
|
|
13.07.2014, 15:19
|
Профессор
|
|
Регистрация: 10.07.2014
Сообщений: 145
|
|
Sweet,
Ну а что тут "важно понимать"? Как по-другому ты себе это представляешь? Если бы в языке по умолчанию из ф-ции возвращалось последнее выражение, то можно было бы вопрос ставить. А так -- это самоочевидная вещь.
|
|
13.07.2014, 15:36
|
Профессор
|
|
Регистрация: 15.03.2014
Сообщений: 561
|
|
Сообщение от newobject
|
А так -- это самоочевидная вещь.
|
Которую некоторые не понимают и задают вопросы на форуме...
|
|
13.07.2014, 15:38
|
Профессор
|
|
Регистрация: 16.03.2010
Сообщений: 1,618
|
|
Сообщение от newobject
|
это самоочевидная вещь
|
3 дня на форуме, а уже рассказывает, что очевидно, а что нет. Это, между прочим, часто задаваемый вопрос.
|
|
13.07.2014, 15:44
|
Профессор
|
|
Регистрация: 10.07.2014
Сообщений: 145
|
|
Sweet,
Sweet, если по-твоему это не очевидно, расскажи, как может быть иначе?
|
|
13.07.2014, 15:55
|
Профессор
|
|
Регистрация: 16.03.2010
Сообщений: 1,618
|
|
Сообщение от newobject
|
если по-твоему это не очевидно
|
Мне очевидно, что с тобой мне разговаривать не о чем.
|
|
|
|