Estoy tratando de publicar algunos datos en una API, pero tengo problemas con javascript.
function pushData() { let rawdata; $.ajaxSetup({ async: false }); $.getJSON('https://api.db-ip.com/v2/free/self', function(result) { result = rawdata; }) console.log(rawdata); let message = { "ip": rawdata.ipAddress, "country": rawdata.countryName, "city": rawdata.city }; console.log(message); $.ajax({ url: "https://xxxx.execute-api.eu-west-2.amazonaws.com/get", headers: {}, /* crossDomain: true, */ type: "GET", success: function(result) { console.log(result); }, error: function() { console.log("error"); } }) } $.ajax({ url: "https://xxxx.execute-api.eu-west-2.amazonaws.com/post", crossDomain: true, type: "POST", contentType: "application/json; charset=utf-8", dataType: "json", data: JSON.stringify(message), success: function(result) { console.log(result); }, error: function() { console.log("error pushing data"); } }) Recibo un error de Uncaught ReferenceError: message is not defined , aunque creo que el message es una variable global, por lo que debería llamarse correctamente en la carga útil. ¿Qué estoy haciendo mal aquí?
Gracias a todos por su respuesta de antemano, solo estoy tratando de escribir un script rápido para mi API aquí.
message es una variable local en la función pushData() , no una variable global. Pero incluso si fuera global, tendría que llamar a la función antes de la segunda llamada $.ajax() .
Mueva la segunda llamada AJAX dentro de la función para que pueda acceder a la variable. Y adopte la asincronía, no la combata con async: false . Anide las sucesivas llamadas AJAX dentro de la función de devolución de llamada de la anterior.
function pushData() { $.getJSON('https://api.db-ip.com/v2/free/self', function(rawData) { console.log(rawdata); let message = { "ip": rawdata.ipAddress, "country": rawdata.countryName, "city": rawdata.city }; console.log(message); $.ajax({ url: "https://xxxx.execute-api.eu-west-2.amazonaws.com/get", headers: {}, /* crossDomain: true, */ type: "GET", success: function(result) { console.log(result); $.ajax({ url: "https://xxxx.execute-api.eu-west-2.amazonaws.com/post", crossDomain: true, type: "POST", contentType: "application/json; charset=utf-8", dataType: "json", data: JSON.stringify(message), success: function(result) { console.log(result); }, error: function() { console.log("error pushing data"); } }) }); }, error: function() { console.log("error"); } }) }