Jak zapisać w zmiennej dane zwracane z ajax?

0

Poniższy kod daje null. Jak zapisać do zmiennej asychroniczne przeładowanie ?

function getLegend(param){
			var dataLegend = null;
			$.ajax({
			type: "GET",
			url: "${base}/manager/typeMap/"+param,
			contentType: "application/json",
			success: function(data){
			console.log(data);
			callback(data);
			dataLegend = data;
			createTable(data);
			}	
														
							
					});
					
			return dataLegend; 				
		}
$(document).ready(function(){
			console.log(getLegend($(".selectpicker option:selected" ).val()));
			});


2

W momencie w którym jedna część kodu staje się asynchroniczna, reszta musi podążyć.

Podejście stare (callbacki):

function getLegend(param, callback) {
  $.ajax({
    /* ... */
  }).done(function (response) {
    callback('response: ' + response);
  });
}

getLegend('foo', function (response) {
  alert(response);
});

Podejście nowe (promise'y):

function getLegend(param) {
  return new Promise((resolve) => {
    $.ajax({
      /* ... */
    }).done((response) => {
      resolve('response: ' + response);
    });
  });
}

getLegend('foo').then((response) => {
  alert(response);
});

Podejście nowe, XXI wiek:

function getLegend(param) {
  return fetch(/* ... */).then((response) => {
    return 'response: ' + response;
  });
}

getLegend('foo').then((response) => {
  alert(response);
});

Podejście nowe, XXI wiek + async/await:

async function getLegend(param) {
  return 'response: ' + await fetch(/* ... */);
}

alert(await getLegend('foo'));

Uprość sobie życie i poczytaj sobie o Promise-ach oraz Fetch API, ponieważ - jak widać - umożliwiają na znaczne uproszczenie kodu ;-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1