Передача переменных данных из внешнего файла jQuery в options.php

Я настраиваю плагин, который требует передачи переменной из отдельного файла jQuery в options.php. Я (я думаю) установил сценарии, которые будут использоваться в моем файле плагина, например:

function ndw_js_init(){ wp_enqueue_script('jquery'); wp_register_script( 'ndw_js', plugin_dir_url( __FILE__ ) . '/ndw_js.js', array( 'jquery' ), '', true ); wp_enqueue_script( 'ndw_js', plugin_dir_url( __FILE__ ) . '/ndw_js.js', array(), '1.0.0', true); $scriptdata = array('admin_ajax' => admin_url( 'admin-ajax.php' )); wp_localize_script( 'ndw_js', 'toremove', $scriptdata); } add_action('admin_init', 'ndw_js_init'); 

Где я буду расклеиваться, находится в файле jQuery. Переменная передается onclick. Пока у меня есть это, что отлично работает (проверено с помощью alert ()):

 $('tr td .widget-remove a').click(function(){ var toremove = $(this).attr('rel'); var url = 'options.php'; // EDIT: Actualy, is this right? Or should the data be passed to the name of my plugin main page I wonder // Out of ideas }); 

Поэтому мне нужно использовать правильный синтаксис AJAX, чтобы передать значение var 'toremove' в 'options.php', а затем сделать что-то в 'options.php', используя значение 'toremove'.

Надеюсь, это имеет смысл!

РЕДАКТИРОВАТЬ № 1:

Хорошо, поэтому после игры с разными настройками, предоставленными всеми вами, у меня есть (полу) функциональный скрипт:

 function ndw_js_init(){ wp_register_script( 'ndw_js', plugin_dir_url( __FILE__ ) . '/ndw_js.js', array( 'jquery' ), '', true ); wp_enqueue_script( 'ndw_js' ); // not working without this wp_localize_script( 'ndw_js', 'toremove', array('ajaxurl' => admin_url( 'admin-ajax.php' ))); } add_action('admin_init', 'ndw_js_init'); 

Без этих настроек, поскольку они ничего не работают. В моем внешнем js-файле у меня теперь есть:

 $('tr td .widget-remove a').click(function(){ var toremove = $(this).attr('rel'); $.ajax({ type: 'POST', dataType: 'json', url: ajaxurl, data: { nonce : toremove.nonce, toremove : toremove }, complete: function( data ){ alert(toremove + " ding!"); } }); }); 

Это работает, но только код jQuery. В области «Администратор» на моей странице настроек плагина предупреждение срабатывает по щелчку с правильным идентификатором «нет» и словом «ding!».

Вернемся к моей странице настроек плагина, и я добавлю это (спасибо @MMK):

 function ndw_ajax_function(){ $toremove = $_POST['toremove']; echo "To remove: " . $toremove; } add_action('wp_ajax_my_ajax_action', 'ndw_ajax_function' ); 

Это не работает, я просматриваю сгенерированный источник, и эхо-строка не появляется. Однако я не уверен в том, что последнее действие добавляет действие, на wp_ajax_my_ajax_action ссылается wp_ajax_my_ajax_action .

Solutions Collecting From Web of "Передача переменных данных из внешнего файла jQuery в options.php"

Могу ли я предложить:

 $('tr td .widget-remove a').click(function(){ var toremove = $(this).attr('rel'); // Out of ideas - you shouldn't really be for we are here! $.ajax({ type: 'POST', // use the method you want dataType: 'json', url: ajaxurl, // this is the url to the admin ajax script data: { nonce : your_script_data_object.nonce, toremove: toremove }, complete: function( object ){ // do what you want here when the ajax requests completes } }); }); 

Теперь в вашем плагине вы должны будете иметь функцию, которая перехватывает данные, которые вы отправляете. Вы должны просто убедиться, что вы добавляете свою функцию перехвата ajax к правильному ключу действия в wordpress. Вот как вы можете это сделать.

Вот не простой способ.

 add_action('wp_ajax_my_ajax_action', 'my_ajax_function' ); 

И здесь уловка.

 add_action('wp_ajax_my_ajax_action', array( $this, 'my_ajax_function' ) ); 

Вот функция:

 function my_ajax_function(){ // do what you want here - the world is open to you $toremove = $_POST['toremove']; // Any other thing you want to do wp_send_json_success( array( 'AnyDataYouWantToSend' => $your_data ) ); } 

Если вы столкнулись с какой-либо ошибкой в my_ajax_function используйте wp_send_json_error вместо wp_send_json_success .

Я также отметил одну необычную вещь. Почему вы используете wp_register_script и wp_enqueue_script в том же скрипте. Вот что вы можете сделать. Удалите строку wp_register_script и пусть ваша функция будет выглядеть так:

 function ndw_js_init(){ wp_register_script( 'ndw_js', plugin_dir_url( __FILE__ ) . '/ndw_js.js', array( 'jquery' ), '', true ); wp_enqueue_script( 'ndw_js' ); wp_localize_script( 'ndw_js', 'toremove' ); } add_action('admin_init', 'ndw_js_init'); 

Вы не нуждаетесь в переменной $scriptdata вы использовали, так как я сказал вам, что переменная javascript ajaxurl уже дает вам доступ к URL-адресу admin ajax. Это только если вы в админе. На интерфейсе убедитесь, что ваш $scriptdata var присутствует как параметр для wp_localize_script

Вам тоже не нужна эта строка:

 wp_enqueue_script('jquery'); 

Это потому, что вы уже сообщаете WordPress, что ваш скрипт требует jquery в массиве параметров array( 'jquery' ) зависимостей array( 'jquery' ) .

Надеюсь, это поможет.

Хорошо, у меня это работает так:

Шаг первый: основной файл плагина

 function ndw_js_init(){ wp_register_script( 'ndw_js', plugin_dir_url( __FILE__ ) . '/ndw_js.js', array( 'jquery' ), '', true ); wp_enqueue_script( 'ndw_js' ); wp_localize_script( 'ndw_js', 'removeid', array('ajaxurl' => admin_url( 'admin-ajax.php' ))); } add_action('admin_init', 'ndw_js_init'); 

Шаг второй: внешний файл JS

 $('tr td .widget-remove a').click(function(){ var toremove = $(this).attr('rel'); $.ajax({ url: removeid.ajaxurl, data:{ 'action' : 'ndw_ajax_function', 'passiton' : toremove }, success: function( data ){ $('.widget-remove').html(data); } }); }); 

Шаг третий: Назад в файл основного плагина

 function ndw_ajax_function(){ $toremove = $_REQUEST['passiton']; echo $toremove; die(); } add_action('wp_ajax_ndw_ajax_function', 'ndw_ajax_function' ); add_action( 'wp_ajax_nopriv_ndw_ajax_function', 'ndw_ajax_function' ); 

Это прекрасно работает. Спасибо за вашу помощь.