Sto provando a utilizzare il valore della prima chiamata ajax nella seconda chiamata ajax. Sto usando la struttura del codice qui sotto. Per qualche motivo la seconda chiamata restituisce undefined
per il userLocation
variable
. Come posso refactoring il mio codice in modo che il valore userLocation dalla prima chiamata ajax possa essere utilizzato nell'url della seconda chiamata ajax?Utilizzare jquery.quando è necessario per passare un valore da una chiamata ajax a un'altra
var userLocation;
function getUserLocation() {
$.ajax({
url: 'https://www.example.com/location.json',
success: function(response) {
userLocation = response.coordinates;
}
});
}
function getCurrentWeather() {
$.ajax({
url: 'https://www.example.com/weather' + userLocation + '.json',
success: function(response) {
console.log(response);
}
});
}
$(document).ready(function() {
$.when(
getUserLocation()
).done(
getCurrentWeather()
)
});
UPDATE 1: Grazie alle risposte fornite di seguito sono stato in grado di refactoring il mio codice. Ora il valore ricevuto dalla prima chiamata ajax può essere utilizzato nella seconda chiamata ajax. Ecco il codice aggiornato:
var userLocation;
function getUserLocation() {
return $.ajax('https://www.example.com/location.json')
.then(function(response) {
return JSON.parse(response);
}).then(function(json) {
// data from the location.json file is available here
userLocation = json.coordinates;
})
}
function getCurrentWeather() {
return $.ajax('https://www.example.com/weather' + userLocation + '.json');
}
getUserLocation().then(getCurrentWeather).then(function(data) {
// data from the weather(userLocation).json file is available here
});
Non ho idea del motivo per cui questo codice si trova all'interno di un '$ (documento) .ready' - che rallenta solo le cose senza motivo. –
Ho aggiunto un codice aggiornato in cui ho seguito la soluzione e inoltre ho rimosso il '$ (documento) .ready'. Ho leggermente modificato l'approccio, ad esempio non sto passando l'argomento alla funzione 'getCurrentWeather()'. Raggiunge il risultato desiderato, anche se non sono sicuro che segua una buona pratica. –
Si sta utilizzando lo stato globale mutabile, questo è sbagliato - causerà bug indesiderati ed è molto lontano da una buona pratica. Il problema con questo tipo di codice è il debugging non scrivendolo. –