Значение параметра функции ajax для WordPress не передается

Я использую wordpress ajax и следующий код, не передающий значение параметра metakey: id до $_POST["metakey"] . Итак, var_dump($_POST) показывает array(0) { } и $_REQUEST показывает array()

если я введу статическое значение переменной в PHP-функцию $key=<any meta key> тогда ее работа прекратится

 jQuery(".selectbox").change(function(){ var id = this.id; // do a POST ajax call $.ajax({ type: "POST", url: '<?php echo admin_url('admin-ajax.php'); ?>', data: ({ action: "get-mata-value", metakey: id }), success: function( response ) { jQuery.each(response ,function(index,value){ jQuery('#' +id).append('<option value="'+value+'">'+value+'</option>'); }); } }); }); 

PHP:

 add_action("wp_ajax_get-mata-value", "get_mata_value"); add_action("wp_ajax_nopriv_get-mata-value", "get_mata_value"); function get_mata_value() { global $wpdb; $key=$_POST["metakey"]; $result= $wpdb->get_col( $wpdb->prepare( " SELECT DISTINCT meta_value FROM $wpdb->postmeta WHERE meta_key = %s ", $key ) ); return($result); exit(); } 

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

Под инструментом для создания хрома я вижу

jquery.js? ver = 1.12.4: 4 XHR завершена загрузка: POST

со следующей ошибкой:

jquery.js? ver = 1.12.4: 2 Uncaught TypeError: не может использовать оператор 'in' для поиска 'length' в

Solutions Collecting From Web of "Значение параметра функции ajax для WordPress не передается"

Прежде всего, вы должны прочитать код на AJAX_in_Plugins

Во-вторых, вы должны посмотреть на wp_localize_script, чтобы получить значение для URL- адреса admin-ajax для вашего javascript.

 $data = array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ); wp_localize_script( 'ajax-script', 'ajax_object', $data ); 

В вашем javascript вы тогда должны ссылаться на локализованные данные

 jQuery(".selectbox").change(function(){ var id = this.id; // do a POST ajax call $.ajax({ type: "POST", url: ajax_object.ajax_url, data: ({ "action": "get-mata-value", "metakey": id }), success: function( response ) { } }); }); 

Я попробовал ваш код. Не знаю, почему, но this.id не возвращает значение для меня. Поэтому вместо этого попробуйте использовать jQuery(this).attr('id') .

Также, если это не решит вашу проблему, попробуйте console.log(id) перед вызовом ajax и проверьте, какое значение вы получите.

Вы получаете ошибку в плагине jQuery. Я не знаю почему, но, похоже, это препятствие на пути развития. Я посмотрел на мою установку wordpress, и я использую ту же самую версию jQuery, но без ошибки.

Я не знаю, есть ли плагин или тема, вызывающая конфликт. Обычным средством является отключить все плагины и темы и посмотреть, не исчезла ли проблема.

Вы также можете попробовать ставить в очередь старые версии jQuery (если это возможно), чтобы увидеть, устраняет ли это проблему.

Возможно, это установка WordPress, которая сломана. Не могли бы вы сделать новую установку WP где-нибудь еще? Ваш местный компьютер может быть хорошим кандидатом.

Извините, я не знаю, почему вы получаете эту ошибку, просто кажется, что до тех пор, пока вы не очистите это, вы не сможете увидеть, работает ли ваш AJAX или нет.

EDIT : Мне интересно, происходит ли ошибка во время отправки данных или когда данные возвращаются. В get_mata_value() вместо «return ($ result)», попробуйте «echo $ result;». И вместо «exit ()»; попробуйте "wp_die ();". Но вместо $result поступающего из базы данных, установите его на тестовое значение, например $result = "I get by with a little help from my friends";

Я отправил сообщение об ошибке из jQuery. См. Последний ответ на этой странице . Я бы изменил первую строку функции обратного вызова изменения из var id=this.id; to var id=jQuery(this).id;

Проблема была связана с google api, как указано в вопросе, отображая сообщение об ошибке api

jquery.js? ver = 1.12.4: 2 Uncaught TypeError: не может использовать оператор 'in' для поиска 'length' в

Поэтому я добавил следующий фрагмент кода в теме functions.php, который вызвал предыдущую версию google api. Он решил проблему передачи значения параметра. Весь другой код был уже в порядке.

  //Making jQuery Google API function modify_jquery() { if (!is_admin()) { // comment out the next two lines to load the local copy of jQuery wp_deregister_script('jquery'); wp_register_script('jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js', false, '1.8.1'); wp_enqueue_script('jquery'); } } add_action('init', 'modify_jquery');