Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   как из ajax вернуть переменную (https://javascript.ru/forum/misc/73026-kak-iz-ajax-vernut-peremennuyu.html)

Sergey1986 14.03.2018 23:50

как из ajax вернуть переменную
 
Всем добра)!
Прошу помощи! есть такой кусочек кода

var response = [];		
		function ajaxRequest() {
			var block = ("autocomplete_job");
			//alert("ajaxRequest");
			$.ajax({
				type: "POST",
				url: "php/zn-edit_controller.php",
				//async:false,
				data:({ZNID:ZNID, block:block}),
				/* прочие настройки */
					success: function (data) {
					   response = data.split("~");
					   //alert(response);
					}
			  });
			return response;
		}
			
		var something = ajaxRequest();
		alert(something);


если async:true, то alert пустой
а если async:false, то все гуд!

вопрос как вывести массив из ajax при async:true (в асинхронном режиме)?!

Заранее спасибо!

Nexus 15.03.2018 00:14

function ajaxRequest(callback) {
	var block = ("autocomplete_job");
	//alert("ajaxRequest");
	$.ajax({
		type: "POST",
		url: "php/zn-edit_controller.php",
		//async:false,
		data: ({
			ZNID: ZNID,
			block: block
		}),
		/* прочие настройки */
		success: function(data) {
			response = data.split("~");
			callback(response);
		}
	});
	return response;
};

ajaxRequest(function(response){
	alert(response);
});

Sergey1986 15.03.2018 10:36

Спасибо!

Dilettante_Pro 15.03.2018 13:02

Nexus,
А чем ваш вариант отличается от
success: function(data) {
			response = data.split("~");
			alert(response);
		}

???

Nexus 15.03.2018 13:20

Dilettante_Pro, тем, что ваш вариант подразумевает выполнение какого-то определенного действия. Т.е. если я дважды вызову функцию "ajaxRequest", то дважды получу 1 результат.
В случае с callback'ом я могу по завершению запроса выполнить различные действия без переопределения функции.
Тс наверняка не спроста закомментировал строку №13.

Dilettante_Pro 15.03.2018 13:45

[quote=Nexus]
Цитата:

Сообщение от Nexus
Тс наверняка не спроста закомментировал строку №13

Строка №13 выводит результат внутри функции, по получении ответа,(как и ваш callback), а ТС хотел увидеть ответ вне функции.
Цитата:

Сообщение от Nexus
В случае с callback'ом я могу по завершению запроса выполнить различные действия без переопределения функции.

Ну в этом может и есть какое-то рациональное зерно

Nexus 15.03.2018 13:58

Dilettante_Pro,
Цитата:

Сообщение от Dilettante_Pro
Строка №13 выводит результат внутри функции, по получении ответа,(как и ваш callback), а ТС хотел увидеть ответ вне функции.

Его желание по-настоящему может исполнить только синхронный запрос.

Sergey1986 15.03.2018 16:04

в пердложенном варианте alert(something); выдает ответ
т.е. переменной присвоен массив ( чего я хотел), с синхронным кодом все проще))))

к стати вопрос еще один)))


function fn_list(callback){
			$.ajax({
				type: "POST",
				url: "php/zn-edit_controller.php",
				data:({ZNID:ZNID, block:block}),
					success: function (data) {
					//$('#show_otladka').data(data)
				       //alert(data);
					   callback(data);
					}
			});
			//return data;
		};


	                        fn_list(function(data){
					//alert("ZNID" + ZNID + "block" + block);
					$('#show_otladka').html(data)
				});


как при вызове fn_list передать ей переменные ZNID и block

Заранее спасибо!

Sergey1986 15.03.2018 16:11

Функция
function fn_list(block, ZNID, callback){...



Вызов
fn_list(block, ZNID, function(data){...


вроде работает!)


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