Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.07.2014, 23:41
Новичок на форуме
Отправить личное сообщение для stikagold Посмотреть профиль Найти все сообщения от stikagold
 
Регистрация: 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);

все равно значении меняется только локально
Ответить с цитированием
  #2 (permalink)  
Старый 12.07.2014, 07:13
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Потому что ajax-запросы выполняются асинхронно. Сначала выполняется функция GetURLArgument, которая приказывает браузеру делать запрос и устанавливает функцию-коллбек, что должна выполниться по возвращении ответа, и только потом, когда ответ приходит, выполняется эта самая функция-коллбек. Выполняй все необходимые тебе действия в коллбеке, ну либо выполняй запрос синхронно, что очень нежелательно (ибо браузер на время ожидания ответа повиснет).
Ответить с цитированием
  #3 (permalink)  
Старый 12.07.2014, 09:58
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от Erolast
Потому что ajax-запросы выполняются асинхронно.
Тут даже более общая проблема. Если ты передаешь аргументом в функцию foo функцию bar, это не значит, что функция foo вернёт то, что возвращает функция bar:
var x = foo(function bar() {
    return "value";
});

x == "value"; // может и равно, а может и нет

Т.е. важно понимать, что если одна функция что-то возвращает, то меньше всего это означает, что и другая функция вернёт то же.
Ответить с цитированием
  #4 (permalink)  
Старый 13.07.2014, 15:01
Профессор
Посмотреть профиль Найти все сообщения от newobject
 
Регистрация: 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()}
Ответить с цитированием
  #5 (permalink)  
Старый 13.07.2014, 15:13
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

newobject, ты вообще не понял, что я написать. Мысль в том и была, что "всё зависит от реализации".
Ответить с цитированием
  #6 (permalink)  
Старый 13.07.2014, 15:19
Профессор
Посмотреть профиль Найти все сообщения от newobject
 
Регистрация: 10.07.2014
Сообщений: 145

Sweet,
Ну а что тут "важно понимать"? Как по-другому ты себе это представляешь? Если бы в языке по умолчанию из ф-ции возвращалось последнее выражение, то можно было бы вопрос ставить. А так -- это самоочевидная вещь.
Ответить с цитированием
  #7 (permalink)  
Старый 13.07.2014, 15:36
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Сообщение от newobject Посмотреть сообщение
А так -- это самоочевидная вещь.
Которую некоторые не понимают и задают вопросы на форуме...
Ответить с цитированием
  #8 (permalink)  
Старый 13.07.2014, 15:38
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от newobject
это самоочевидная вещь
3 дня на форуме, а уже рассказывает, что очевидно, а что нет. Это, между прочим, часто задаваемый вопрос.
Ответить с цитированием
  #9 (permalink)  
Старый 13.07.2014, 15:44
Профессор
Посмотреть профиль Найти все сообщения от newobject
 
Регистрация: 10.07.2014
Сообщений: 145

Sweet,
Sweet, если по-твоему это не очевидно, расскажи, как может быть иначе?
Ответить с цитированием
  #10 (permalink)  
Старый 13.07.2014, 15:55
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от newobject
если по-твоему это не очевидно
Мне очевидно, что с тобой мне разговаривать не о чем.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск