Estoy tratando de devolver valor a través de AJAX. A continuación se muestra el código que armé en base a algunos ejemplos que encontré y parece funcionar, pero creo que hay una mejor manera de hacerlo.
(async () => { const url = new URL("/ajax-page", window.location.origin); const headers = new Headers([ [ "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8" ] ]); const body = new URLSearchParams([ ["sl", slug] ]); const res = await fetch(url, { method: "POST", headers, body }); if (res.ok) { let mkr = await res.text(); crd = mkr.split("|"); lat = crd[0], lon = crd[1]; console.log(lat+' '+lon); } })();PHP (página ajax)
// php magic gets values echo $mar['lat'].'|'.$mar['lon'];¿Necesito usar (async () => {...})(); ¿más?
Estas líneas:
lat = crd[0], lon = crd[1]; no son declaraciones de variables (porque no hay palabra clave let ). Está usando el operador de coma, por lo que es equivalente a:
lat = (crd[0], lon = crd[1]) El operador de coma devuelve el valor de la segunda expresión, por lo que tanto lat como lon se establecen en crd[1] .
La causa de este problema es que terminó las dos líneas anteriores con ; en lugar de , . Toda la declaración debe ser:
let mkr = await res.text(), crd = mkr.split("|"), lat = crd[0], lon = crd[1];Si usa la función de sangría automática de su IDE, habría demostrado que esto no está agrupado de la manera que pretendía.
await solo se puede usar dentro de una función asíncrona . No puedes evitarlo. Las funciones asíncronas devuelven implícitamente una promesa, por lo que otras funciones asíncronas pueden esperar sus resultados.