Pregunta sobre Developing with WordPress de Wordpress:

usando ajax para devolver json

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

Deja una respuesta 0

Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *