Pregunta sobre Developing with WordPress de Wordpress:

Listados desplegables AJAX

Un usuario pregunt贸 馃憞

Estoy desarrollando un plugin personalizado que tiene una lista desplegable que obtiene valor y texto de la base de datos. Luego tengo otra lista desplegable que debe completarse en funci贸n del valor desplegable seleccionado anteriormente.

Aqu铆 est谩 mi c贸digo para AJAX, pero no parece estar funcionando. Mi c贸digo jquery est谩 en un archivo js separado鈥. /plugindir/customplugin/js/jsscript.js

jQuery(document).ready(function() {
jQuery('#ddlSchool').change(function(){
var school=jQuery('#ddlSchool').val();
jQuery('#ddlResVisit').empty(); //remove all existing options
jQuery.ajax({
			type: 'POST',
       dataType: 'json',
            url: residential_visits.ajaxurl,
            data: {
        	'action' : 'residential_visits',
	        'school' : school
                },
	complete: function( response ) {
		console.log(response );
		alert(response.responseText);
         );
	}
      });
   });
});

Archivo de plugin personalizado que contiene mi php y html

<?php
//Load CSS and Javascript Files
wp_register_style('my_styles', plugins_url('css/styles.css', __FILE__));
wp_enqueue_style('my_styles');
wp_enqueue_script( 'jquery' );
wp_register_script('ajax-script', plugins_url('js/jsscripts.js', __FILE__), array('jquery'),'1.1');
wp_enqueue_script('ajax-script');
wp_localize_script( 'ajax-script', 'residential_visits', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
 // THE AJAX ADD ACTIONS
add_action( 'wp_ajax_residential_visits', 'residential_visits');
add_action( 'wp_ajax_nopriv_residential_visits', 'residential_visits');

//Function to be called from AJAX SCRIPT
function residential_visits() {
ob_clean();
$school = $_POST['ddlSchool'];
global $wpdb;

$result = get_results("select id, group_name from wp_pods_residential_visits where school='$school'");
$main = array('data'=>$result);
echo json_encode($main);
    // Don't forget to stop execution afterward.
wp_die();
}

Y finalmente el c贸digo de mi primera lista desplegable

<?php 
//get list of schools
global $wpdb;
$schools = $wpdb->get_results("Select abbr_code, school_name from wp_pods_schools order by school_name;");
?>
<label for"ddlSchools">School Attending:</label>
<select name="ddlSchool" id="ddlSchool">
<?php
foreach ($schools as $school){
?>
<option value="<?php echo $school->abbr_code ?>"><?php echo $school->school_name ?></option>
 <?php
}
  ?>
</select>

Agradecer铆amos cualquier ayuda ya que no veo por qu茅 no est谩 funcionando.

gracias Jamie

Este tema fue modificado hace 3 a帽os, 2 meses por. Motivo: c贸digo fijo – bbcode no funciona

(@bcworkz)

Hace 3 a帽os, 2 meses

En la funci贸n residence_visits (), 驴se declara get_results () en alg煤n lugar de su c贸digo? No es una funci贸n est谩ndar de WP o PHP. Es posible que haya querido que fuera as铆: $result = $wpdb->get_results('your SQL here');?

FYI, como bbcode [code] Aqu铆 no funciona. Utilice comillas invertidas o el bot贸n de c贸digo. Agradecemos el esfuerzo de un buen formato 馃檪

Lanzador de hilos

(@jamiesw)

Hace 3 a帽os, 2 meses

lo siento, est谩 destinado a ser $result = $wpdb->get_results('your SQL here'); pero incluso una actualizaci贸n que no marc贸 la diferencia, 驴d贸nde m谩s me he perdido algo o he escrito mal algo? muchas gracias Jamie

Lanzador de hilos

(@jamiesw)

Hace 3 a帽os, 2 meses

En la salida de mi consola, ahora recibo 400 solicitudes incorrectas (VM2647: 1 http://my.desktopserver.dev/wp-admin/admin-ajax.php 400 Petici贸n Incorrecta))

Llamar a mi funci贸n php directamente en la p谩gina funciona y hacer eco de la informaci贸n correcta en la p谩gina, as铆 que s茅 que la funci贸n funciona. tambi茅n en mi jsscript.js hice el alert(residential_visits.ajaxurl); y muestra la URL admin-ajax.php seg煤n lo previsto.

ARCHIVO JSSCRIPTS:

jQuery(document).ready(function() {
jQuery('#ddlSchool').change(function(){
//var st=$('#category option:selected').text();
var school=jQuery('#ddlSchool').val();
jQuery('#ddlResVisit').empty(); //remove all existing options
jQuery.ajax({
			type: 'POST',
			dataType: 'json',
			contentType: "application/json",
			url: residential_visits.ajaxurl,
			data: {
				'action' : 'residential_visits',
				'school' : school
			},
			complete: function( response ) {
				console.log(response);
				//alert(response.responseJSON.body);				
			}
		});
	});
});

Archivo PHP en mi carpeta de plugins personalizados (este archivo php crea el contenido utilizado en la p谩gina como acceso directo, no s茅 si esto hace una diferencia) 驴Mi funci贸n PHP debe estar en otro lugar para ver el controlador ajax?


<?php
// Registration form
//Load CSS and Javascript Files
wp_register_style('reg_styles', plugins_url('css/styles.css', __FILE__));
wp_enqueue_style('reg_styles');

wp_register_script('ajax-script', plugins_url('js/jsscripts.js', __FILE__), array('jquery'),'1.1');
wp_enqueue_script('ajax-script');
wp_localize_script( 'ajax-script', 'residential_visits', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
 // THE AJAX ADD ACTIONS
add_action( 'wp_ajax_residential_visits', 'residential_visits');
add_action( 'wp_ajax_nopriv_residential_visits', 'residential_visits');
//residential_visits(); -WHEN ENABLED IT SHOWS THE DATA SO IT WORKS

function residential_visits() {
ob_clean();
// Handle request then generate response using WP_Ajax_Response
global $wpdb;
$result = $wpdb->get_results("select id, group_name from wp_pods_residential_visits ");
//$main = array('data'=>$result);
echo json_encode($result);
// Don't forget to stop execution afterward.
wp_die();
}
}
if (!empty($_POST)){
//Pass Form Data to Save Function
saveRegData($_POST);
echo "<h2>Thank you for submitting the registration information.</h2>";
}
else{
//Display Registration Form
?>
<form method="post" name="frmVisit" id="frmVisit">
<table id="tblRegistration" name="tblRegistration" class="tblRegForm">
<!-- Other form Fields -->
<tr>
<td colspan="2"><h3>School Details</h3></td>
</tr>
<tr>
<td colspan="2">
<?php 
// Get list of schools
global $wpdb;
$schools = $wpdb->get_results("Select abbr_code, school_name from wp_pods_schools order by school_name;");
?>
<label for"ddlSchools">School Attending:</label>
<select name="ddlSchool" id="ddlSchool">
<?php
foreach ($schools as $school){
?>
<option value="<?php echo $school->abbr_code ?>"><?php echo $school->school_name ?></option>
<?php } ?>
</select>

<select id="ddlResVisit" name="ddlResVisit">
</select>
   <!-- Rest of HTML, PHP to save data etc -->

驴Algun consejo?

Jamie

(@bcworkz)

Hace 3 a帽os, 2 meses

Si su funci贸n est谩 disponible en c贸digo WP est谩ndar, por ejemplo, en una plantilla, estar谩 disponible para los controladores Ajax, asumiendo que la solicitud Ajax se env铆a a trav茅s de admin-ajax.php.

Creo que tu problema es el encabezado contentType. Los datos enviados no son JSON, son texto sin formato. Er, bueno, algo as铆. Captura un objeto simple como datos: y jQuery lo convierte autom谩ticamente en una cadena de datos. Entonces, cuando el servidor recibe los datos, es texto sin formato. Intenta correr text/plain o el predeterminado application/x-www-form-urlencoded en lugar de. Tenga en cuenta que dataType json est谩 bien, por lo que lo necesita de nuevo.

驴Solucion贸 tu problema??

0 / 0

Deja una respuesta 0

Tu direcci贸n de correo electr贸nico no ser谩 publicada.