Un usuario pregunt贸 馃憞
No tengo claro si esto es posible o no … solo pruebe las cosas en este punto, planee limpiar y pasar al enchufe.
Tengo una funci贸n php simple que devuelve resultados de una consulta
add_action( 'wp_ajax_ajax_get_geo', 'ajax_get_geo' );
add_action( 'wp_ajax_nopriv_ajax_get_geo', 'ajax_get_geo' ); // This lines it's because we are using AJAX on the FrontEnd.
function ajax_get_geo(){
global $wpdb;
$table_name = $wpdb->prefix . "wbmexp_geo";
$sql = "SELECT * FROM $table_name";
$results = $wpdb->get_results( $sql );
echo json_encode($results);
die();
}
y luego tengo un script para llamar a esto a trav茅s de ajax
function getGeo() {
jQuery.ajax({
url : '/wp-admin/admin-ajax.php',
type : 'POST',
dataType: "json",
data : {
action : 'ajax_get_geo'
},
success: function(obj) {
geoData = obj;
console.log(geoData);
}
});
return geoData;
}
Ahora, si llamo a esto desde otra p谩gina / bloque de script, puedo ver json console.log, pero todo lo que quiero hacer es obtener el json envuelto en esta p谩gina y usarlo en toda la p谩gina / gui贸n – 驴es esto posible? Me estoy poniendo ‘indefinido’.
Este tema fue modificado hace 1 a帽o, 1 mes por. Este tema fue modificado hace 1 a帽o, 1 mes por.
(@howdy_mcgee)
Hace 1 a帽o, 1 mes
No estoy seguro de si dar茅 seguimiento a la pregunta que tiene o lo que est谩 preguntando. 驴Podr铆as aclarar?
– – –
Si desea obtener los datos geogr谩ficos en PHP, simplemente llame al mismo c贸digo PHP que llama a sus ganchos de acci贸n. Si desea mostrar lo que se devolvi贸 desde AJAX, puede usar JS para poner esos datos en HTML.
– – –
Si se refiere al uso de la misma informaci贸n durante toda la sesi贸n del usuario, es posible que pueda almacenar estos datos en una cookie. Se consciente de ello GDPR.
https://www.w3schools.com/js/js_cookies.asp
(@bcworkz)
Hace 1 a帽o, 1 mes
PHP no est谩 recopilando su par谩metro action:. Env铆e objetos arbitrarios JS en datos .ajax (): no es compatible con PHP por alguna raz贸n. Los datos del formulario funcionan perfectamente. Intentalo
data : serialize({ action : 'ajax_get_geo'}),
o use .post () que aparentemente nos pasa datos.
(@ebud)
Hace 1 a帽o, 1 mes
Gracias por la respuesta. data: serialize ({action: ‘ajax_get_geo’}), los errores no est谩n definidos por> serialize.
@howdy_mcgee: el panorama general es arrastrar datos a una tabla y luego usar ajax para arrastrarlos a la API de Google Map. Pulsando este /wp-admin/admin-ajax.php?action=ajax_get_geo restaura los datos como se esperaba. Usar铆a ajax para volver a poner esos datos en una p谩gina con el script de mapeo.
Esto esta funcionando ahora
function getGeo() {
jQuery.ajax({ // We use jQuery instead $ sign, because WordPress convention.
url : '/wp-admin/admin-ajax.php', // This addres will redirect the query to the functions.php file, where we coded the function that we need.
type : 'POST',
dataType: "json",
async: false,
data : {
action : 'ajax_get_geo',
},
success: function(obj) {
jsondata = obj;
//console.log(geoData);
}
});
return jsondata;
}
y luego en la p谩gina de mapeo que uso:
var geoData = getGeo();
console.log(geoData[0]);
Esta parece ser la clave
async: false,
Tambi茅n tengo curiosidad acerca de la identificaci贸n. 驴Deber铆a usar .done vs success?
(@boatkung)
Hace 1 a帽o, 1 mes
async: no se considera falso y no es una buena pr谩ctica para AJAX (AJAX deber铆a hacer Asynchronization) As铆 que intentar茅 compartir mi experiencia …
El resultado de la l铆nea final no especificado tiene ‘geoData’ porque devuelve ‘geoData’ inmediatamente mientras jQuery.ajax todav铆a se est谩 ejecutando. Necesita m谩s tiempo para solicitar y recibir el resultado antes de que var geoData se anuncie en el 茅xito de la devoluci贸n de llamada.
Entonces, si necesita crear alguna funci贸n AJAX para una mejor reutilizaci贸n o algo como esto. Recomiendo probar esto en su lugar.
Cree una variable para la funci贸n AJAX
var getGeo = function() {
return jQuery.ajax({
url: '/wp-admin/admin-ajax.php',
type: 'POST',
data: {
action : 'ajax_get_geo'
},
});
}
y cuando quieras solicitar el uso de datos jQuery.when()
jQuery.when( getGeo ).done( function( obj ) {
// do some magic with response in here
console.log( obj );
} );
pero si desea crear una funci贸n AJAX en main.js o en otra ubicaci贸n y desea reutilizarla en cada p谩gina que desee, intente publicitar la funci贸n var AJAX globalmente de esta manera
if ( window.getGeo == undefined ) {
window.getGeo = getGeo;
}
y ahora puedes reutilizarlo en todas partes con jQuery.when ()
jQuery.when( window.getGeo ).done( function( obj ) {
// do some magic with response in here
console.log( obj );
} );
y por 煤ltimo sobre .done VS success Mi opini贸n es que si el c贸digo es tan complicado, use .done pero use la recuperaci贸n de 茅xito para algunas l铆neas de recuperaci贸n
var aLotOfData = jQuery.when( window.getGeo )
aLotOfData.done(function(obj) {
console.log( obj );
});
espero que esto ayude
Esta respuesta fue modificada hace 1 a帽o, 1 mes por. Esta respuesta fue modificada hace 1 a帽o, 1 mes por.
(@ebud)
Hace 1 a帽o, 1 mes
Contin煤e esto … Estoy trabajando en este trabajo, pero tengo problemas con los datos devueltos por la llamada ajax.
Al final, mi php finalmente agrega esto, que tiene 1 columna de datos llamada geometr铆a (tipo ‘json’).
echo json_encode($results);
die();
gui贸n
var featurecollection =[] ;
var jsonData = $.ajax({
url : '/wp-admin/admin-ajax.php',
type : 'POST',
dataType: "json",
data : {
action : 'ajax_get_geo',
},
success: function(obj) {
console.log('Got Data');
},
error: function(xhr) {
alert(xhr.statusText)
}
});
$.when(jsonData).done(function(dd) {
$.each(dd, function(index, item) {
featurecollection.push(
JSON.parse(dd[index].geometry)
);
});
console.log(featurecollection);
});
y en el lado de ajax puedo cargar el resultado en el navegador y console.log, pero cuando trato de usar los resultados de esta columna que contiene geometr铆a para diferentes pol铆gonos, no me permite usar la sintaxis de puntos. para acceder a partes espec铆ficas (por ejemplo, coordenadas geom茅tricas).
驴Los datos de la columna devuelta no parecen ser datos json?
驴Solucion贸 tu problema??
0 / 0