Мне нужно изменить форму отправки на сообщение ajax. Я работаю в рамках codeigniter. Текущий код JS является:Конвертировать форму Отправить сообщение AJAX в сообщении AJAX
$('#book-appointment-submit').click(function(event) {
event.preventDefault();
var formData = jQuery.parseJSON($('input[name="post_data"]').val());
var postData = {
'csrfToken': GlobalVariables.csrfToken,
'id_users_provider': formData['appointment']['id_users_provider'],
'id_services': formData['appointment']['id_services'],
'start_datetime': formData['appointment']['start_datetime'],
};
if (GlobalVariables.manageMode) {
postData.exclude_appointment_id = GlobalVariables.appointmentData.id;
}
var postUrl = GlobalVariables.baseUrl + '/index.php/appointments/ajax_check_datetime_availability';
$.post(postUrl, postData, function(response) {
console.log('Check Date/Time Availability Post Response :', response);
if (response.exceptions) {
response.exceptions = GeneralFunctions.parseExceptions(response.exceptions);
GeneralFunctions.displayMessageBox('Unexpected Issues', 'Unfortunately '
+ 'the check appointment time availability could not be completed. '
+ 'The following issues occurred:');
$('#message_box').append(GeneralFunctions.exceptionsToHtml(response.exceptions));
return false;
}
if (response === true) {
$('#book-appointment-form').submit(); //on submit
} else {
GeneralFunctions.displayMessageBox('Appointment Hour Taken', 'Unfortunately '
+ 'the selected appointment hour is not available anymore. Please select '
+ 'another hour.');
FrontendBook.getAvailableHours($('#select-date').val());
alert('#select-date');
}
}, 'json');
});
КОНТРОЛЛЕР
if($this->input->post('submit2')) {
$post_waiting = json_decode($_POST['post_waiting'], true);
$waitinglist = $post_waiting['appointment'];
$this->load->model('appointments_model');
$this->appointments_model->waitinglist_to_db($waitinglist);
$this->load->view('appointments/waiting_success');//return to book view
} else {
try {
$post_data = json_decode($_POST['post_data'], true);
$appointment = $post_data['appointment'];
$customer = $post_data['customer'];
if ($this->customers_model->exists($customer))
$customer['id'] = $this->customers_model->find_record_id($customer);
$customer_id = $this->customers_model->add($customer);
$appointment['id_users_customer'] = $customer_id;
$appointment['id'] = $this->appointments_model->add($appointment);
$appointment['hash'] = $this->appointments_model->get_value('hash', $appointment['id']);
$provider = $this->providers_model->get_row($appointment['id_users_provider']);
$service = $this->services_model->get_row($appointment['id_services']);
$company_settings = array(
'company_name' => $this->settings_model->get_setting('company_name'),
'company_link' => $this->settings_model->get_setting('company_link'),
'company_email' => $this->settings_model->get_setting('company_email')
);
форма представляет штраф с этим кодом, но когда форма используется в кадре данные будут потеряны. Чтобы справиться с этим, мне нужно изменить строку $('#book-appointment-form').submit();
вместо вызова ajax. Я попытался заменить строку, используя формат, аналогичный другой Ajax вызова выше в JS:
...
if (response === true) {
var dataUrl = GlobalVariables.baseUrl + '/index.php/appointments/';
$.post(dataUrl, formData, function(response) {
console.log('Customer Confirms Post Response:', response);
if (response.exceptions) {
response.exceptions = GeneralFunctions.parseExceptions(response.exceptions);
GeneralFunctions.displayMessageBox('Unexpected Issues', 'Unfortunately '
+ 'the check appointment time availability could not be completed. '
+ 'The following issues occurred:');
$('#message_box').append(GeneralFunctions.exceptionsToHtml(response.exceptions));
return false;
}
}, 'json');
} else {
...
Это не сработало.
У меня ошибка сервера 500.
Я не думаю, что правильно обрабатываю вызов ajax в пределах другого вызова ajax. Я предположил, что мне нужно сделать функцию в моем контроллере, чтобы получить вызов, поэтому я добавил "ajax_customer_confirms"
к URL-адресу и сделал функцию ajax_customer_confirms()
в моем контроллере, и это тоже не сработало.
ВОПРОСЫ:
- Как я могу добавить вызов Ajax внутри вызова AJAX, чтобы заменить мою отправку формы?
- Нужно ли обрабатывать вызов ajax с помощью функции в контроллере или я могу просто заменить
.submit()
на вызов ajax и оставить контроллер в покое?
Можете ли вы подтвердить, что 'formData' как ожидается во втором АЯКС вызова? Я спрашиваю, потому что ошибка сервера 500 может быть вызвана отсутствием 'csrfToken'. Другими словами, экземпляр 'formData' в первом вызове ajax может не отображаться во втором. – DFriend
При ближайшем рассмотрении вы действительно хотите отправить 'formData' во второй вызов ajax? Если вы используете вместо этого 'postData'? Вот что держит 'csrfToken'. – DFriend
Спасибо, что указали это. postData - это то, что мне нужно. Я проверю это. –