2015-12-17 2 views
0

Мне нужно изменить форму отправки на сообщение 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() в моем контроллере, и это тоже не сработало.

ВОПРОСЫ:

  1. Как я могу добавить вызов Ajax внутри вызова AJAX, чтобы заменить мою отправку формы?
  2. Нужно ли обрабатывать вызов ajax с помощью функции в контроллере или я могу просто заменить .submit() на вызов ajax и оставить контроллер в покое?
+0

Можете ли вы подтвердить, что 'formData' как ожидается во втором АЯКС вызова? Я спрашиваю, потому что ошибка сервера 500 может быть вызвана отсутствием 'csrfToken'. Другими словами, экземпляр 'formData' в первом вызове ajax может не отображаться во втором. – DFriend

+0

При ближайшем рассмотрении вы действительно хотите отправить 'formData' во второй вызов ajax? Если вы используете вместо этого 'postData'? Вот что держит 'csrfToken'. – DFriend

+0

Спасибо, что указали это. postData - это то, что мне нужно. Я проверю это. –

ответ

0

Каждая итерация работы по этому вопросу воспитывается больше вопросов, но окончательный ответ был размещен здесь: AJAX submit and 500 server error

Смежные вопросы