Un utente ha chiesto informazioni su Developing with WordPress di Wordpress

utilizzando ajax per restituire json

Un utente ha chiesto 👇

Non mi è chiaro se questo sia possibile o meno … a questo punto prova le cose, pianifica di ripulire e passare alla presa.

Ho una semplice funzione php che restituisce i risultati di una query

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();
} 

e poi ho uno script per chiamarlo tramite 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;
}

Ora, se lo chiamo da un’altra pagina / blocco di script, posso vedere json console.log, ma tutto ciò che voglio fare è ottenere che json restituisca questa pagina e utilizzarlo attraverso la pagina / script: è possibile? Sto diventando “indefinito”.

Questo argomento è stato modificato 1 anno, 3 mesi fa da. Questo argomento è stato modificato 1 anno, 3 mesi fa da.

(@howdy_mcgee)

1 anno, 3 mesi fa

Non sono sicuro se darò seguito alla tua domanda o a quello che stai chiedendo. Potresti chiarire?

– – –

Se vuoi ottenere i dati geografici in PHP, chiama lo stesso codice PHP che chiama i tuoi action hook. Se vuoi mostrare cosa è stato restituito da AJAX, puoi usare JS per mettere quei dati in HTML.

– – –

Se ti riferisci all’utilizzo delle stesse informazioni durante l’intera sessione utente, potresti essere in grado di memorizzare questi dati in un cookie. Sii consapevole di questo GDPR.

https://www.w3schools.com/js/js_cookies.asp

(@bcworkz)

1 anno, 3 mesi fa

PHP non sta raccogliendo la tua azione: parametro. Invia oggetti arbitrari JS in dati .ajax (): non compatibile con PHP per qualche motivo. I dati del modulo funzionano perfettamente. Provalo
data : serialize({ action : 'ajax_get_geo'}),

o usa .post () che apparentemente ci passa i dati.

Lanciatore di thread

(@ebud)

1 anno, 3 mesi fa

Grazie per il feedback.
data: serialize ({action: ‘ajax_get_geo’}), gli errori non sono definiti da> serialize.

@howdy_mcgee: il quadro generale è trascinare i dati su una tabella e quindi utilizzare ajax per trascinarli nell’API di Google Map. Premendo questo /wp-admin/admin-ajax.php?action=ajax_get_geo ripristina i dati come previsto. Userei ajax per rimettere quei dati su una pagina con lo script di mappatura.

Adesso funziona

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;
}

e poi nella pagina di mappatura che utilizzo:

  var geoData = getGeo();
  console.log(geoData[0]);

Questa sembra essere la chiave
async: false,

Sono anche curioso di sapere se dovrei usare .done vs success?

(@boatkung)

1 anno, 3 mesi fa

async: non considerato falso e non è una buona pratica per AJAX (AJAX dovrebbe Asynchronize)
Quindi cercherò di condividere la mia esperienza …

Il risultato della riga finale non specificato ha “geoData” perché restituisce “geoData” immediatamente mentre jQuery.ajax è ancora in esecuzione.

Quindi, se hai bisogno di creare qualche funzione AJAX per un migliore riutilizzo o qualcosa del genere. Raccomando invece di provare questo.

Crea una variabile per la funzione AJAX

var getGeo = function() {
  return jQuery.ajax({ 
    url: '/wp-admin/admin-ajax.php',
    type: 'POST',
    data: {
      action : 'ajax_get_geo'
    },
  });
}

e quando si desidera richiedere l’utilizzo dei dati jQuery.when()

jQuery.when( getGeo ).done( function( obj ) {
  // do some magic with response in here
  console.log( obj );
} );

ma se vuoi creare una funzione AJAX in main.js o in un’altra posizione e vuoi riutilizzare ogni pagina che desideri, prova a pubblicizzare una funzione var AJAX a livello globale come questa

if ( window.getGeo == undefined ) {
  window.getGeo = getGeo;
}

e ora puoi riutilizzarlo ovunque con jQuery.when ()

jQuery.when( window.getGeo ).done( function( obj ) {
  // do some magic with response in here
  console.log( obj );
} );

e infine sul successo di .done VS
A mio parere, se il codice è così complicato, usa .done ma usa Success Recall per poche righe di richiamo

var aLotOfData = jQuery.when( window.getGeo )

aLotOfData.done(function(obj) {
  console.log( obj );
});

spero che questo aiuti

Questa risposta è stata modificata 1 anno, 3 mesi fa. Questa risposta è stata modificata 1 anno, 3 mesi fa. Lanciatore di thread

(@ebud)

1 anno, 3 mesi fa

Continua … ci sto lavorando, ma ho problemi con i dati restituiti dalla chiamata ajax.

Il mio php infine invia questo che contiene 1 colonna di dati geometrici denominati (tipo “json”).


echo json_encode($results);
die();

script

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);
	});

e sul lato ajax posso caricare il risultato nel browser e console.log, ma quando provo a utilizzare i risultati di questa colonna contenente la geometria per diversi poligoni, non mi consente di utilizzare la sintassi del punto. per accedere a parti specifiche (es. coordinate geometriche).

I dati dalla colonna restituita non sembrano essere dati JSON?

Was this helpful?

0 / 0

Lascia un commento 0

Your email address will not be published. Required fields are marked *