Viene visualizzato l'errore 500 server quando si tenta di eseguire AJAX. Sono molto nuovo per AJAX. Ogni cosa funziona nel codice se corro alcun AJAX nello script, per esempio solo in esecuzione:AJAX invio e 500 errore del server
$("#book-appointment-form").submit();
Pertanto, sembra che tutte le funzioni del database vanno bene. Tuttavia, ho bisogno di AJAX per eseguire il mio codice in una pagina di Wordpress.
Non vedo alcuna nota nei log degli errori. Il log della console mostra che l'url sta puntando alla posizione corretta. Cosa posso mancare?
Il log della console mostra i dati all'interno del input nascosto mostrando in 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]
VISTA:
<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 CONTROLLER
<?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);
}
?>
Ho provato a sostituire serializeArray()
con serialize()
. Ho anche provato serializeArray()
convertito con $.param(confirmedData)
- gli stessi risultati davvero e ancora non sembra raggiungere il server. 500 errore persiste. Penso che serialize()
potrebbe essere il più appropriato comunque.
Possibile duplicato per interrogare [jQuery Ajax su PHP MySQL - Errore interno server interno Cross Domain 500] (http://stackoverflow.com/questions/30545389/jquery-ajax-to-php-mysql-cross-domain-internal- server erro-500). Ciò potrebbe essere utile: [jQuery AJAX cross domain] (http://stackoverflow.com/questions/3506208/jquery-ajax-cross-domain?rq=1) – Roberto
Grazie, non si tratta di un problema interdominio. Tutti vengono eseguiti sul mio server sullo stesso dominio localhost. Mi chiedo di JSON e se serializeArray è sufficiente o se devo fare di più con i dati per renderlo pronto per il trasporto. –