Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Не записывается переменная (https://javascript.ru/forum/dom-window/57538-ne-zapisyvaetsya-peremennaya.html)

scorpion95 07.08.2015 22:18

Не записывается переменная
 
function getstatus(idstatus){
	var x;
	
	$.ajax({
		url: "php/getstatus.php",
		type: "GET",
		dataType: "text",
		data: { status:idstatus },
		success: function(text){
			x = text;			
		}
	});
	return x;
}

Вот такая функция есть. Её проблема в том, что в x не записывается значение text, при выводе переменная выходит со значением undefined почему-то. С самим PHP скриптом все в норме, я вставлял alert(text) в success - выводит то, что нужно. Но почему-то не записывает оно это значение в x и все тут. Плиз хелп. Чувствую, что тут какая-то базовая ошибка, но не знаю какая.

javaQest 07.08.2015 23:55

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

scorpion95 08.08.2015 00:10

Цитата:

Сообщение от javaQest (Сообщение 383189)
читай про асинхронность. тут такие темы каждый день по нескольку штук появляются.

А как обычно эту проблему решают? Есть ли возможность синхронно вызывать функции?

javaQest 08.08.2015 00:33

Цитата:

Сообщение от scorpion95
А как обычно эту проблему решают?

это не проблема, просто код кривой.
Цитата:

Сообщение от scorpion95
Есть ли возможность синхронно вызывать функции?

Есть синхронный аякс. Он крайне не рекомендован. Есть возможность синхронизировать асинхронные вызова. Смотри в сторону promises. Либо писать код на колбеках. В твоем случае что-то вроде
function getstatus(idstatus, onResponse){
   
    $.ajax({
        url: "php/getstatus.php",
        type: "GET",
        dataType: "text",
        data: { status:idstatus },
        success: function(text){
            onResponse(text);          
        }
    });
}

это проще всего, для начала. С промайсами примерно так:
function getstatus(idstatus){
   return new Promise(function(resolve, reject){
     $.ajax({
        url: "php/getstatus.php",
        type: "GET",
        dataType: "text",
        data: { status:idstatus },
        success: function(text){
            resolve(text);          
        }
    });
 })
}

getstatus(foo).then(function(data){do smth with data})

если есть ошибка, обрабатывается reject и ловиться catch

вкратце

Гугли подробности


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