Простой запрос JQuery AJAX не позволяет запустить PHP Script

У меня довольно простой запрос AJAX для моего сайта WordPress. Моя PHP-функция – это оператор switch, и все остальные операторы switch работают, за исключением недавнего добавления (change_due_date).

Я прокомментировал большую часть кода в своем новом «случае», чтобы лучше попытаться найти проблему.

AJAX (внизу страницы, под моим другим запросом AJAX (который работает)):

function my_ajax() { var newDate = <?php echo $new_date; ?>; var data_string = 'action=do_ajax&fn=change_due_date&newDate=' + newDate; jQuery.ajax({ type: "POST", url: '/wp-admin/admin-ajax.php', data: data_string, dataType: 'JSON', success: function(data){ // alert(data); console.log("success!"); }, error: function(errorThrown){ console.log("error!"); } }); } // end of my_ajax function jQuery('a.test').click(function(){ my_ajax(); }); </script> 

Сначала я попытался просто отправить «newDate» в качестве значения «данных» – и это действительно сработало (как в AJAX вернул «успех!»). В этом случае моя PHP-функция все еще не запускалась, поскольку она не вызывалась. Я подозреваю, что что-то не так с моим форматированием на стороне AJAX вещей …

Теперь, когда я отправляю 'data_string' в качестве своих данных, я получаю ошибку AJAX …

PHP Функция:

 switch($_POST['fn']){ ... /* AUTOMATE DUE DATE CREATION - made by Alex */ case 'change_due_date' : /*$field_key = "field_515b2428887d7"; // Key ID for field $new_date = $_POST['newDate']; // new date $new_due_date = DateTime::createFromFormat('Ymd', $new_date); $new_due_date->format('Ymd'); // formatting */ echo ('<h1>functioning</h1>'); // testing purposes /*$parent_field = get_field($field_key); // Select parent field foreach($parent_field as $sub_row) : // Change value of sub-fields $sub_row['date_due'] = $new_due_date; $new_values[] = $sub_row; // Load new values into array endforeach; update_field( $field_key, $new_values ); // Update ACF*/ $output = "Successfully updated due dates."; // testing break; ... } 

Я работаю над этим кодом пару дней – я признаю, что я не лучший в AJAX … но я не могу найти, что случилось? Я рассмотрел WP Codex для руководства о том, как структурировать мой AJAX.

Solutions Collecting From Web of "Простой запрос JQuery AJAX не позволяет запустить PHP Script"

Простой ответ на ваш вопрос заключается в том, что у вас есть тип данных как JSON в вашем запросе ajax, и вы передаете ему строку. Вам нужно передать объект json в запрос ajax, когда вы выбрали dataType равным JSON. Объект JSON обычно представляет собой значение пары ключей внутри фигурных скобок. Вот ссылка, где вы можете увидеть, как запросы ajax могут быть реализованы в WordPress.

https://www.smashingmagazine.com/2011/10/how-to-use-ajax-in-wordpress/ https://stackoverflow.com/questions/14185582/creating-an-ajax-call-in-wordpress- то , что-делать-я-у-к-относятся к Аксесс-wordpres

Проверьте данные внутри функции ajax. Вам нужно будет подтвердить свой json, прежде чем отправлять его на сервер, чтобы не было никаких проблем. Также вам нужно будет декодировать json на стороне сервера PHP. Тогда только вы сможете манипулировать данными в вашем PHP-коде. Может быть, альтернативный способ для вас состоит в том, что вы можете сделать запрос без datatype json, и вы получите значения post в своем PHP-коде, что упростит его использование. Проверьте ссылку ниже для справки.

http://www.makeuseof.com/tag/tutorial-ajax-wordpress/

Я думаю, что у вас может быть проблема с тем, как вы устанавливаете свои данные. Если вы прочитаете WP Codex на AJAX, вы увидите, что данные в примерах находятся в парах ключ / значение. То есть, данные должны выглядеть примерно так:

 var data = { 'action' : 'do_ajax', 'fn' : 'change_due_date', 'newDate' : newDate }; 

Также обратите внимание, что Codex говорит, что переменная ajaxurl указывает на /wp-admin/admin-ajax.php (начиная с версии 2.8). Иногда это не будет работать, если вы wp_localize_script() не wp_localize_script() .

Лично я не использую datatype: 'JSON' . Я не могу сказать, нарушена ли ваша схема, включив ее в ваши данные.

Наконец, не забывайте об этом в конце функции PHP, которая отправляет данные обратно на вызов AJAX:

 echo $output; wp_die();