Un usuario preguntó 👇
Hola, Agradecemos cualquier ayuda con la siguiente pregunta.
Me encontré con el Error 500: Error interno del servidor después de solicitar datos de la base de datos desde la llamada ajax.
Estoy usando admin-amax.php de la siguiente manera:
$my_handle = array(
'ajaxurl' => admin_url( 'admin-ajax.php' )
);
wp_localize_script( 'javascript', 'ajax-access', $my-handle );
wp_enqueue_script('javascript');
Mi aplicación ajax:
$.ajax({
url: ajax-access.ajaxurl,
type: 'POST',
async: false,
dataType: 'json',
data: {
sentvariable: true,
},
success: function (data) {
alert(data.returnedvariable);
},
error: function (data) {
//always run this section whenever db is queried
alert('ERROR: ' + data.status + ' :: ' + data.statusText);
}
});
Si elimino la consulta de la base de datos del archivo php y envío una respuesta de cable codificada, obtengo esa cadena como mi respuesta en el archivo js. Todo funciona bien siempre que no consulte la base de datos en esa llamada.
Este tema fue modificado hace 2 años, 7 meses por.
(@catacaustica)
Hace 2 años, 7 meses
Queremos ver el código de la consulta SQL, y probablemente la función completa, para ver si esa parte contiene un error. Si es grande, puedes usarlo. PasteBin para pegarlo.
Lanzador de hilos
(@hmonlouis)
Hace 2 años, 7 meses
Catacaustic gracias por su rápida respuesta,
No tengo ningún problema de personalización. Estoy usando una función de wp predefinida. Probé una pregunta personalizada con los mismos resultados. Recibo ese error con las siguientes consultas / funciones de wp:
$postid = $wpdb->get_var( 'SELECT ID FROM '.$wpdb->prefix.'posts WHERE post_title = "' .$title.'"' );
$message = wp_insert_post($postarr, true);
is_user_logged_in()
Todos funcionan perfectamente en el lado de php, pero si trato de responder a la llamada ajax, obtengo el Error 500 del servidor interno.
Aquí está la función:
function check_login(){
// global $wpdb;
if(is_user_logged_in()){
$isloggedin = true;
}else{
$isloggedin = false;
}
wp_send_json( array(
'loggedin' => __( apply_filters( 'the_content', $isloggedin), 'easybulletin' ),
));
// $str = json_encode(array('loggedin' => $isloggedin));
// echo $str;
wp_die();
}
Esta respuesta fue modificada hace 2 años, 7 meses.
(@catacaustica)
Hace 2 años, 7 meses
No parece haber nada malo en eso por lo que publicaste aquí.
¿Ha revisado los registros de errores del servidor para ver qué han registrado? El registro de errores de Apache puede contener algo, y si se trata de un problema de base de datos, los registros del servidor MySQL deberían indicar algo.
Lanzador de hilos
(@hmonlouis)
Hace 2 años, 7 meses
Los registros no muestran nada que indique un error. Revisé los registros de error y acceso de Apache y el registro de errores de MySQL. Nada, solo el error 500 en el registro de acceso de Apache.
Veo el error 400 sin otra explicación:
"GET / HTTP/1.0" 400 983
No sé si eso tiene algo que ver.
Esta respuesta fue modificada hace 2 años, 7 meses.
(@catacaustica)
Hace 2 años, 7 meses
Sin ver los errores, será casi imposible saber qué es lo que está mal.
Lo único que recomendaría para esto es probar una llamada de base de datos diferente, que sabe que se ejecutará rápidamente, y ver si tiene el mismo problema. Si lo hace, no es la base de datos, sino algo en el código que se encuentra entre eso y la respuesta de AJAX. Si funciona bien, verifique el problema en phpMyAdmin y vea qué sucede.
(@catacaustica)
Hace 2 años, 7 meses
Solo estoy desviando otra cosa que podría ser un problema.
¿Dónde establece la acción para su llamada AJAX? En esta página, muestra el parámetro de actividad según sea necesario cuando envía una solicitud AJAX. No puedo ver eso en su aplicación, y sin arreglar eso, WordPress no sabrá qué hacer con la solicitud, por lo que tiene errores.
(@jakept)
Hace 2 años, 7 meses
Eso es action
especificado en su aplicación AJAX, su código no debería estar ejecutándose en absoluto. ¿Ha editado admin-ajax.php directamente?
Lanzador de hilos
(@hmonlouis)
Hace 2 años, 7 meses
@catacaustic: envié el action
yo mo scripteanna poner en cola. @jacob: No he editado admin-ajax.php en absoluto. Lo curioso es que tengo otras llamadas ajax y devuelvo las respuestas apropiadas solo mi parte check_login()
y save_post()
Las funciones son las que tienen esta pregunta. Probé el problema en phpMyadmin y funciona bien.
Esta respuesta fue modificada hace 2 años, 7 meses.
(@bcworkz)
Hace 2 años, 6 meses
Su parámetro de datos debe ser parte de la matriz de datos: declarada en su llamada $ .ajax. No tiene sentido afirmarlo mientras se pone en cola. Su función de controlador Ajax debe emplearse en una acción cuya etiqueta consista en parte del valor de la acción.
data: {
sentvariable: true,
action: "my_ajax"
},
Luego en PHP:
add_action('wp_ajax_my_ajax', 'check_login');
Por cierto, la acción anterior solo se grabará si el usuario está conectado. No está de más volver a comprobarlo, pero no es necesario.
Si su llamada Ajax es para cambiar la SS, por ejemplo llamando a save_post (), debe verificar un pase de seguridad en PHP, así como el redirector verificando que su página está haciendo la solicitud Ajax y no una dirección de computadora de algún hacker. aplicaciones falsificadas.
Además del recurso catacáustico vinculado a él, valdría la pena que revisara las páginas del Manual de plugins en Ajax.
Una última cosa que no está causando su problema pero que debe abordarse. No tiene sentido usar la función de traducción __ () en el retorno de apply_filters () o cualquier valor de variable. La traducción solo se puede realizar si la cadena original está codificada. Puedes hacerlo:
echo __('Please translate this!', 'my_plugin');
Esto no es:
echo __( $the_content, 'my_plugin');
Lanzador de hilos
(@hmonlouis)
Hace 2 años, 6 meses
@bcworks Gracias por la sugerencia. Me ayudó a descubrir qué estaba pasando. Recibí este error porque estaba intentando modificar la base de datos aunque no había iniciado sesión. Sin embargo, estoy desarrollando un plugin de interfaz y siempre obtendré el error 500 is_user_logged_in()
y mi save_post()
función.
También hice los cambios que sugirió y solucionaré el error 500.
GRACIAS A TODOS !! para su ayuda.
¿Solucionó tu problema??
0 / 0