How to fix ajax POST /wp-admin/admin-ajax.php 500 (Internal Server Error)? I’m receiving this error in console when I’m about to call my ajax code backend. It appears to me that I am missing global variable in enable the code to work. See the wrong and correct coding below. It might be not the same issue on you but you can found a clue how to fix 500 (Internal Server Error) error.
Wrong code, missing “global $wpdb;” global variable and this is causing 500 (Internal Server Error) error
// JS CODE jQuery( document ).ready( function( $ ){ $( '#gallery #select-friend' ).keyup( function(){ $.ajax({ url : ajaxurl, type : 'post', data : { action : 'ys_creadit_to', keyword : $( '#gallery #select-friend' ).val() }, success : function(data){ console.log(data); } }); }); }); // PHP CODE add_action( 'wp_ajax_ys_creadit_to', 'ajax_creadit_to' ); add_action( 'wp_ajax_nopriv_ys_creadit_to', 'ajax_creadit_to' ); function ajax_creadit_to(){ $keyword = isset( $_POST['keyword'] ) ? explode( ' ', $_POST['keyword'] ) : array(); $s = ""; if( $keyword ) : foreach( $keyword as $id => $word ) : if( $id != 0 && ( ( count( $keyword ) - 1 ) < $id ) ) : $s .= " OR "; endif; $s .= "(display_name LIKE '%$word%')"; endforeach; endif; $results = $wpdb->get_results( "SELECT ID, display_name FROM wp_users WHERE display_name LIKE '%$s%' LIMIT 0, 50" ); print_r( $results ); die(); }
Correct and working code
// JS CODE jQuery( document ).ready( function( $ ){ $( '#gallery #select-friend' ).keyup( function(){ $.ajax({ url : ajaxurl, type : 'post', data : { action : 'ys_creadit_to', keyword : $( '#gallery #select-friend' ).val() }, success : function(data){ console.log(data); } }); }); }); // PHP CODE add_action( 'wp_ajax_ys_creadit_to', 'ajax_creadit_to' ); add_action( 'wp_ajax_nopriv_ys_creadit_to', 'ajax_creadit_to' ); function ajax_creadit_to(){ global $wpdb; $keyword = isset( $_POST['keyword'] ) ? explode( ' ', $_POST['keyword'] ) : array(); $s = ""; if( $keyword ) : foreach( $keyword as $id => $word ) : if( $id != 0 && ( ( count( $keyword ) - 1 ) < $id ) ) : $s .= " OR "; endif; $s .= "(display_name LIKE '%$word%')"; endforeach; endif; $results = $wpdb->get_results( "SELECT ID, display_name FROM wp_users WHERE display_name LIKE '%$s%' LIMIT 0, 50" ); print_r( $results ); die(); }
Leave a Reply