Jak zapisać w zmiennej dane zwracane z ajax?

Jak zapisać w zmiennej dane zwracane z ajax?
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
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()));
			});


Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
2

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

Podejście stare (callbacki):

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

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

Podejście nowe (promise'y):

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

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

Podejście nowe, XXI wiek:

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

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

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

Kopiuj
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 ;-)

DE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1788

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.