Otrzymuję błąd 500 serwera podczas próby uruchomienia mojej AJAX. Jestem bardzo nowy w AJAX. Każda rzecz działa w kodzie, czy nie biegnę AJAX w skrypcie, na przykład tylko z systemem:Przesłanie AJAX i błąd 500 serwera
$("#book-appointment-form").submit();
Dlatego wydaje się, że wszystkie funkcje bazy danych są w porządku. Jednak potrzebuję AJAX, aby uruchomić mój kod na stronie Wordpress.
Nie widzę żadnych notatek w dziennikach błędów. Dziennik konsoli pokazuje, że adres URL wskazuje prawidłową lokalizację. Czego może mi brakować?
Dziennik konsola pokazuje dane w ukrytym wejściem ukazujące się w confirmedData:
0: Object
name: "csrfToken"
value: "0f4343dfd0e71a8fa515d08f340f7bc9"
__proto__: Object
1: Object
name: "post_data"
value: "{"customer":{"last_name":"Test","first_name":"Joe","email":"[email protected]","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]
Widok:
<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>
CONTROLLER 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);
}
?>
Próbowałem zastąpić serializeArray()
z serialize()
. Próbowałem również serializeArray()
przekonwertować z $.param(confirmedData)
- same wyniki naprawdę i nadal nie wydaje się dotrzeć do serwera. Błąd 500 nie ustępuje. Myślę, że jednak bardziej odpowiednie może być serialize()
.
Możliwy duplikat do pytania [jQuery Ajax do PHP MySQL - Cross Domain Internal Server Error 500] (http://stackoverflow.com/questions/30545389/jquery-ajax-to-php-mysql-cross-domain-internal- server-erro-500). Może to być pomocne: [domena krzyżowa jQuery AJAX] (http://stackoverflow.com/questions/3506208/jquery-ajax-cross-domain?rq=1) – Roberto
Dzięki, nie jest to problem z wieloma domenami. Wszystkie są uruchomione na moim serwerze na tym samym domenie localhost. Zastanawiam się nad JSON i czy serializeArray jest wystarczająca lub jeśli muszę zrobić więcej z danymi, aby przygotować go do transportu. –