В моей папке плагина у меня есть два файла 1. hello-ajax.php 2. myajax.js
и по короткому коду я добавляю эту форму на frontend
<form id="theForm" method="post"> <input id="name" name="name" value = "name" type="text" /> <input name="action" type="hidden" value="the_ajax_hook" /> <!-- this puts the action the_ajax_hook into the serialized form --> <input id="submit_button" value = "Click This" type="button" onClick="submit_me();" /> </form> <div id="response_area"> This is where we\'ll get the response </div>
В файле плагина я добавил js-файл как:
wp_enqueue_script( 'my-ajax-handle', plugin_dir_url( __FILE__ ) . 'myajax.js', array( 'jquery' ) ); wp_localize_script( 'my-ajax-handle', 'the_ajax_script', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); // THE AJAX ADD ACTIONS add_action( 'wp_ajax_the_ajax_hook', 'the_action_function' ); add_action( 'wp_ajax_nopriv_the_ajax_hook', 'the_action_function' ); // need this to serve non logged in users // THE FUNCTION function the_action_function(){ /* this area is very simple but being serverside it affords the possibility of retreiving data from the server and passing it back to the javascript function */ $name = $_POST['name']; echo"Hello World, " . $name;// this is passed back to the javascript function die();// wordpress may print out a spurious zero without this - can be particularly bad if using json } // ADD EG A FORM TO THE PAGE
Таким образом, форма отображается на передней панели, но в консоли Uncaught ReferenceError: submit_me is not defined
submit_me()
определяется в файле myajax.js следующим образом:
function submit_me(){ //alert(a); jQuery.post(the_ajax_script.ajaxurl, jQuery("#theForm").serialize() , function(response_from_the_action_function){ jQuery("#response_area").html(response_from_the_action_function); } ); }
Но эта функция не работает, и насколько я знаю, есть какая-то проблема в вызове ajax, поэтому предложите мне, что я сделал не так и как заставить ее работать … Спасибо
Думаю, я должен упомянуть об этом, поэтому кто-то может избежать тратить 2 часа, как я. Если вы пытаетесь выполнить ajax с внешнего интерфейса, но у вас есть плагин, который отключает доступ администратора (бэкэнд) к зарегистрированным пользователям, тогда возникает проблема. Чтобы решить, я получил следующий код из everthere . Добавьте это в свои функции.
if(isset($_REQUEST['action']) && $_REQUEST['action']=='AJAXfunctionCall'): do_action( 'wp_ajax_' . $_REQUEST['action'] ); endif;
Где AJAXfunctionCall – ваша функция, отвечающая на вызов Ajax.
Убедитесь, что функция submit_me()
не включена в обработчик $(document).ready()
. Функция не видна из глобальной области действия и поэтому не может быть вызвана из свойства onclick
.
Кроме того, правильный способ включения скриптов в wordpress заключается в подключении к действию wp_enqueue_scripts
:
add_action('wp_enqueue_scripts', 'enqueue_your_scripts'); function enqueue_your_scripts() { wp_enqueue_script( 'my-ajax-handle', plugin_dir_url( __FILE__ ) . 'myajax.js', array( 'jquery' ) ); wp_localize_script( 'my-ajax-handle', 'the_ajax_script', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); }