Pregunta sobre Developing with WordPress de Wordpress:

Error admin-ajax.php plugin desarrollo 400?

Un usuario preguntó 👇

Estoy escribiendo un plugin que debería usar ajax. Aquí está mi archivo de plugin principal:

add_action( 'wp_enqueue_scripts', 'fhw_register_script' );

function fhw_register_script() {
	wp_deregister_script( 'jquery' );
	add_action( 'wp_ajax_fhw_do_ajax_request', 'fhw_do_ajax_request' );
	
	wp_register_script( 'jquery', 'http://code.jquery.com/jquery-latest.min.js');
	wp_register_script( 'fhw_formular', plugins_url( '/js/formular.js', __FILE__ ), array( 'jquery' ) );
	
	wp_enqueue_script( 'fhw_formular' );
	
	wp_localize_script( 'fhw_formular', 'ajax_object',
            array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'we_value' => 1234 ) );
	
	wp_enqueue_script( 'jquery' );
}

Entonces, si llamo al formulario.js, mi dev-console dice

Archivado a capacidad de carga: el servidor respondió con el estado 400 (Solicitud incorrecta)

don Archivo admin-ajax.php. ¿Qué hacer?

(@jakept)

Hace 2 años, 9 meses

¿Dónde está la llamada AJAX real? ¿O se adjunta el código para responder? Lo que tiene aquí no preguntará a admin-ajax.php desde el frente por sí solo, por lo que puede que no cause el error.

Tan bueno como eso, no cargue su propio jQuery.

Y no necesitas esa última llamada para ponerlo en cola. Ya está sucediendo como una dependencia de su secuencia de comandos.

Esta respuesta fue modificada hace 2 años, 9 meses por.

(@fhwebdesign)

Hace 2 años, 9 meses

Bien, aquí está mi código como lo llamo

jQuery(document).ready( function($) {
	
	$('input').bind("change", function(e) {
		onSelect();
	});
	
	
});

function onSelect() {
	var data = {
		'action': 'fhw_getTyp',
		'typ' : this.value
	};
	jQuery.post(ajax_object.ajax_url, data, function(response) {
		$(".ergebnis").html(response);
	});
};

Esta respuesta fue modificada hace 2 años, 9 meses por.

(@bcworkz)

Hace 2 años, 9 meses

Mueva su llamada de acción adicional a ‘wp_ajax_fhw_do_ajax_request’ al exterior de la devolución de llamada de los scripts en cola. Las aplicaciones admin-ajax.php no intentan poner en cola scripts. Su llamada de acción adicional se puede ejecutar en la carga de un plugin, no tiene que ser un retiro.

(@fhwebdesign)

Hace 2 años, 9 meses

Mueva su llamada de acción adicional a ‘wp_ajax_fhw_do_ajax_request’ a una cola de llamada de scrip externa. Las aplicaciones admin-ajax.php no intentan poner en cola scripts. Su llamada de acción adicional se puede ejecutar en la carga de un plugin, no tiene que ser un retiro.

Según tengo entendido, debería usar este código así

add_action( 'wp_enqueue_scripts', 'fhw_register_script' );
add_action( 'wp_ajax_fhw_do_ajax_request', 'fhw_do_ajax_request' );
function fhw_register_script() {
	wp_register_script( 'fhw_formular', plugins_url( '/js/formular.js', __FILE__ ), array( 'jquery' ) );
	
	wp_enqueue_script( 'fhw_formular' );
	
	wp_localize_script( 'fhw_formular', 'ajax_object',
            array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'we_value' => 1234 ) );
	wp_enqueue_script( 'fhw_formular' );
}

A continuación se muestra el error 400 Bad Missing.

(@bcworkz)

Hace 2 años, 9 meses

Sí, ese era mi secreto. Pero me perdí otro detalle importante. Cambie una línea hasta ahora:
add_action( 'wp_ajax_fhw_getTyp', 'fhw_do_ajax_request' );
La etiqueta de actividad debe responder a los datos de actividad transmitidos desde jQuery, no a su nombre de recuperación.

Probablemente sepa acerca de esto, pero vale la pena señalar que se requiere un inicio de sesión para que esa acción funcione. Para los usuarios que no han iniciado sesión, la etiqueta de actividad ‘wp_ajax_no_priv_fhw_getTyp’ se agregaría por separado.

(@fhwebdesign)

Hace 2 años, 9 meses

Sí, ese era mi secreto. Pero me perdí otro detalle importante. Cambie una línea hasta ahora: add_action (‘wp_ajax_fhw_getTyp’, ‘fhw_do_ajax_request’); La etiqueta de actividad debe responder a los datos de actividad transmitidos desde jQuery, no a su nombre de recuperación.

Probablemente sepa acerca de esto, pero vale la pena señalar que se requiere un inicio de sesión para que esa acción funcione. Para los usuarios que no han iniciado sesión, la etiqueta de actividad ‘wp_ajax_no_priv_fhw_getTyp’ se agregaría por separado.

Está bien, lo hice así:

add_action( 'wp_ajax_fhw_ladeMarke', 'fhw_do_ajax_request' );
add_action( 'wp_ajax_no_priv_fhw_ladeMarke', 'fhw_do_ajax_request' );

function fhw_register_script() {
	wp_register_script( 'fhw_formular', plugins_url( '/js/formular.js', __FILE__ ), array( 'jquery' ) );
	
	wp_enqueue_script( 'fhw_formular' );
	
	wp_localize_script( 'fhw_formular', 'ajax_object',
            array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'we_value' => 1234 ) );
	wp_enqueue_script( 'fhw_formular' );
}

Pero eso tampoco funciona, sigue siendo el mismo Error 400.

(@bcworkz)

Hace 2 años, 9 meses

Supongo que la acción de agregar wp_enqueue_scripts todavía existe para fhw_register_script () en algún lugar. ¿Y aparentemente el valor de acción de su jQuery ahora es fhw_ladeMarke en lugar de fhw_getTyp como en el botón publicado en su primera respuesta a Jacob?

Asegurémonos de que se esté llamando a la devolución de llamada de Ajax. Debería serlo si lo anterior es cierto. Agrega algo como error_log('Notice: fhw_do_ajax_request() was called'); como la primera línea en fhw_do_ajax_request (). Pruebe y luego verifique que el mensaje aparezca en el registro de errores. Ya sea que esté allí o no, nos dirá en qué dirección buscar los problemas.

(@fhwebdesign)

Hace 2 años, 9 meses

Supongo que la acción de agregar wp_enqueue_scripts todavía existe para fhw_register_script () en algún lugar.

La secuencia de comandos anterior es el archivo de plugin completo principal.

¿Y aparentemente el valor de acción de su jQuery ahora es fhw_ladeMarke en lugar de fhw_getTyp como en el botón publicado en su primera respuesta a Jacob?

Lo acabo de renombrar, pero en todos los archivos.

Asegurémonos de que se esté llamando a la devolución de llamada de Ajax. Debería serlo si lo anterior es cierto. Agregue algo como error_log (‘Notificado: fhw_do_ajax_request ()’); como la primera línea en fhw_do_ajax_request (). Pruebe y luego verifique que el mensaje aparezca en el registro de errores. Ya sea que esté allí o no, nos dirá en qué dirección buscar los problemas.

Ehm … ¿debería tener una función fhw_do_ajax_request? ¿Que debería ser? Como se dijo, el script en la respuesta anterior es mi archivo completo (sin mencionar). Oh, también hay un plugin con enqueue fhw_register_script ().

(@bcworkz)

Hace 2 años, 9 meses

¡Si! Necesita la función fhw_do_ajax_request () como tiene add_action( 'wp_ajax_fhw_ladeMarke', 'fhw_do_ajax_request' );
Esa es la función que maneja el lado del servidor de aplicaciones Ajax. No sé qué se necesita para completar su llamada Ajax en el servidor, pero esa funcionalidad es fundamental para que suceda.

Cuando tu lo hagas

jQuery.post(ajax_object.ajax_url, data, function(response) {
		$(".ergebnis").html(response);
});

una aplicación es MAIL a ajax_url, que es el archivo admin-ajax.php. Este archivo recupera el valor de la acción (‘fhw_ladeMarke’) de la matriz de datos pasada y lo agrega a «wp_ajax_» para la etiqueta de acción que agregó ‘fhw_do_ajax_request’. El archivo admin-ajax.php luego se ejecuta
do_action( 'wp_ajax_fhw_ladeMarke', 'fhw_do_ajax_request' );
llamando a su función fhw_do_ajax_request () para manejar una solicitud Ajax. Note el frente hacer en vez de añadir. Eso hace una gran diferencia.

Espero que tenga sentido. Es esencial comprenderlo para que funcione como lo hace Ajax en WP. Debe evaluar el proceso hasta que realmente tenga sentido para usted. Puede que no resuelva su problema 400 inmediato, pero es igualmente importante resolver problemas similares en el futuro. Si necesita una aclaración sobre algún punto, solo pregunte. Haré todo lo posible para ayudarlo a comprender.

(@fhwebdesign)

Hace 2 años, 9 meses

¡Bien, gracias por esa buena explicación! El error fue que olvidé incluir el ladeMarke.php en el archivo principal del plugin. ¡Gracias por tu ayuda!

(@bcworkz)

Hace 2 años, 9 meses

¡Ja! ¡Esas dependencias! Me alegra que hayas localizado el problema.

(@ikirby)

Hace 2 años, 6 meses

¡Gracias! Salvaste mi día !!! Tuve el mismo problema: no se incluyó una nueva versión del plugin :))))))))))))

¿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 *