2015-12-20 17 views
5

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().

+0

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

+0

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. –

Odpowiedz

0

To działało:

moich 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> 

moim kontroler

<?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); 
} 
?> 

Nie więcej błędów serwer 500.

0

Nie sądzę, że jest to związane z Ajaxem. W skrypcie może występować problem z wywołaniem przez ajax.

Spróbuj sprawdzić bez AJAX dataUrl

Proszę również sprawdzić połączenie. http://pcsupport.about.com/od/findbyerrormessage/a/500servererror.htm

+0

Tak, działa bez AJAX. Właśnie dlatego publikuję to. Adres URL jest dokładny. Jestem prawie pewien, że spieprzyłem AJAX. Nie jestem pewien, gdzie zawiodłem. –

+0

Czy możesz spróbować z innym adresem danych? To może zadziałać. Również nie znalazłem złapać w twoim try catch bloku. Czy brak jest zamknięcia "}"? – SanketR

+0

Jeśli chodzi o adres URL, wygląda na to, że działa poprawnie. Po uruchomieniu adresu URL w przeglądarce otrzymuję fałszywą odpowiedź tak, jak powinna. Ale nie wysyła tego z AJAX.Tak więc, mimo że dane są serializowane, może nie być w odpowiednim formacie strony ph zastanawiam się. –

Powiązane problemy