2015-12-20 20 views
5

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.

+0

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

+0

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

risposta

0

questo ha funzionato:

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

mio controller

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

Non più errore del server 500.

0

Non penso sia correlato all'Ajax. Potrebbe esserci un problema nello script che stai chiamando tramite ajax.

tenta di controllare senza Ajax dataUrl

Si prega di controllare anche collegamento. http://pcsupport.about.com/od/findbyerrormessage/a/500servererror.htm

+0

Sì, funziona senza AJAX. Ecco perché sto postando questo. E l'Url è accurato. Quindi, sono abbastanza sicuro di aver rovinato l'AJAX. Non sono sicuro di dove mi sono incasinato. –

+0

Puoi provare con un altro dataURL? Potrebbe funzionare. Inoltre non ho trovato il catch nel tuo catch catch try. Manca una chiusura '}'? – SanketR

+0

Per quanto riguarda l'URL sembra funzionare bene. Quando eseguo l'URL nel browser ottengo la risposta falsa come dovrebbe. Ma non lo sta mandando indietro con AJAX.Quindi, sebbene i dati siano serializzati, potrebbe non essere nel formato corretto per il lato php che mi sto chiedendo. –

Problemi correlati