Я получаю ошибку сервера 500 при попытке запустить мой AJAX. Я очень новичок в AJAX. Все работает в коде, если я не запускаю AJAX в скрипте, например, просто запускаю:
$("#book-appointment-form").submit();
Поэтому кажется, что все функции базы данных в порядке. Однако мне нужен AJAX для запуска моего кода на странице WordPress.
Я не вижу никаких заметок в журналах ошибок. Журнал консоли показывает, что URL-адрес указывает на правильное местоположение. Что я могу пропустить?
В журнале консоли отображаются данные в скрытом входе, отображаемые в подтвержденных данных:
0: Object name: "csrfToken" value: "0f4343dfd0e71a8fa515d08f340f7bc9" __proto__: Object 1: Object name: "post_data" value: "{"customer":{"last_name":"Test","first_name":"Joe","email":"email4me@verizon.net","phone_number":"9093334444","address":"","city":"","zip_code":"","id_cellcarrier":"2","wp_id":"1"},"appointment":{"start_datetime":"2015-12-25 11:00:00","end_datetime":"2015-12-25 11:50:00","notes":"","is_unavailable":false,"id_users_provider":"85","id_services":"13"},"manage_mode":false}" __proto__: Object length: 2 __proto__: Array[0]
ПОСМОТРЕТЬ:
<html> <form id="book-appointment-form" style="display:inline-block" method="post"> <button id="book-appointment-submit" type="button">Confirm</button> <input type="hidden" name="csrfToken" /> <input type="hidden" name="post_data" /> </form> </html>
JS
<script> $("#book-appointment-form").submit(function(event){ var confirmedData = $(this).serializeArray(); var dataUrl = GlobalVariables.baseUrl + '/index.php/appointments/ajax_confirm_appointment'; $.post(dataUrl, confirmedData, function(response) { //////////////////////////////////////////////////////////// console.log('Customer Confirmed Post Response:', response); //////////////////////////////////////////////////////////// }, 'json'); event.preventDefault(); }); $("#book-appointment-form").submit(); </script>
PHP-КОНТРОЛЛЕР
<?php public function ajax_confirm_appointment() { if($_POST["post_data"]){ try { $post_data = json_decode($_POST['post_data'], true); $appointment = $post_data['appointment']; $customer = $post_data['customer']; ...some database stuff here .... } catch(Exception $exc) { $view['exceptions'][] = $exc; } $this->load->view('appointments/book_success', $view); $form_data = TRUE; break; } else { $form_data = FALSE; } echo json_encode($form_data); } ?>
Я попытался заменить serializeArray()
на serialize()
. Я также попробовал serializeArray()
преобразованный с помощью $.param(confirmedData)
– такие же результаты действительно и все же он, похоже, не достигает сервера. 500 сохраняется. Я думаю, что serialize()
может быть более подходящим.
Я не думаю, что это связано с Ajax. В скрипте могут возникнуть проблемы, которые вы вызываете через ajax.
Попробуйте проверить без ajax dataUrl
Также проверьте ссылку. http://pcsupport.about.com/od/findbyerrormessage/a/500servererror.htm
Это сработало:
Мой JS
<script> $("#book-appointment-form").submit(function(event){ var postData = { csrfToken: $('input[name=csrfToken]').val(), post_data: jQuery.parseJSON($('input[name="post_data"]').val()) }; var postUrl = GlobalVariables.baseUrl + '/index.php/appointments/ajax_confirm_appointment'; $.post(postUrl, postData, function(response) { //////////////////////////////////////////////////////////// console.log('Customer Confirmed Post Response:', response); //////////////////////////////////////////////////////////// if (!GeneralFunctions.handleAjaxExceptions(response)) return; }, 'json'); }); </script>
Мой КОНТРОЛЛЕР
<?php public function ajax_confirm_appointment() { try { $post_data = $_POST['post_data']; $appointment = $post_data['appointment']; $customer = $post_data['customer']; ...some database stuff here .... } echo json_encode($yn_response); } ?>
Не более 500 ошибок сервера.