Chiamare una funzione specifica di php da una richiesta ajax?

JackIlPazzo

Utente Attivo
25 Lug 2014
69
0
6
Ho creato un'applicazione web che si basa sul framework CodeIgniter. Funziona molto bene ma il reparto di sviluppo mi ha chiesto di riscriverla senza utilizzare alcuna dipendenza da framework, quindi puro codice php. Ora ho bisogno di conoscere se è possibile eseguire una richiesta ajax richiamando una specifica funzione php.
Ho un file chiamato login.php, in questo file c'è un form per inserire username e password per far loggare l'utente, queste informazioni poi verranno spedite al server. Ora quando l'utente preme il pulsante di login si attiva questo codice:

Codice:
 var postUrl = GlobalVariables.baseUrl + 'application/controllers/user.php/ajax_check_login';
 var postData =
 {
      'username': $('#username').val(),
      'password': $('#password').val()
 };

 $.post(postUrl, postData, function(response)
 {
      // Some stuff..
 }, 'json');

La variabile postUrl viene valorizzata correttamente con questo contenuto:

http://localhost/App_Name/application/controllers/user.php/ajax_check_login

Ora io dispongo di una lista di controller che ho creato per gestire l'applicazione web. Uno di questi controller è user.php, in esso sono contenute tutte le funzioni per la gestione dell'uetnte. Come potete vedere dalla richiesta ajax voglio richiamare la funzione ajax_check_login la quale mi permetterà di controllare se l'utente ha inserito credenziali corrette per effettuare l'accesso al server.
Il contenuto della funzione è il seguente:

Codice:
public function ajax_check_login()
{   
    echo "Test?";
    try
    {
        if(!isset($_POST['username']) || !isset($_POST['password']))
        {
            throw new Exception('Credenziali non corrette!');
        }

        $user_data = $this->check_login($_POST['username'], $_POST['password']);

        if($user_data)
        {
            $output[] = array(
                "contenuto.."
            echo json_encode($output);
        }
        else
        {
            echo json_encode(AJAX_FAILURE);
        }

    }
    catch(Exception $exc)
    {
        echo json_encode(array(
            'Eccezioni ' => array(exceptionToJavaScript($exc))
        ));
    }
}

Al di sopra di tutto ho inserito un echo giusto per vedere se veniva stampato qualcosa ma nulla...
Nella console di Chrome c'è il seguente contenuto quando clicco su "ajax_check_login":

This request has no response data available.

Non so esattamente cosa sto sbagliando perché il tutto funzionava bene con il framework, inizio a pensare che non posso chiamare una funzione specifica semplicemente riferendomi all'url sulla variabile postUrl. Ho infatti effettuato alcuni test eliminando del tutto la funzione dal controller e cosa ho ottenuto? Lo stesso risultato, quindi penso a questo punto che ajax non permetta, o non riesce ad identificare la funzione specifica in questo modo da solo. Ho anche provato a rimuovere il 'json' alla fine della richiesta post e ottengo lo stesso risultato. Qualche idea?
 
Ciao, la variabile dell'url non mi sembra corretta : se ajax_check_login è una directory dovrebbe terminare con lo slash.
Ti converrebbe usare il metodo $.getJSON se sai di ricevere un json o in alternativa la sintassi estesa del metodo $.ajax.
con i metodi fail() e error() puoi scoprire se la chiamata non va a buon fine
Codice:
 $.getJSON(postUrl, postData, function (response) {
                // Some stuff..
            }).error(function () {
                alert("errore chiamata ajax");
            }).fail(function () {
                alert("errore risposta ajax");
            });
 
Ciao, la variabile dell'url non mi sembra corretta : se ajax_check_login è una directory dovrebbe terminare con lo slash.
Ti converrebbe usare il metodo $.getJSON se sai di ricevere un json o in alternativa la sintassi estesa del metodo $.ajax.
con i metodi fail() e error() puoi scoprire se la chiamata non va a buon fine
Codice:
 $.getJSON(postUrl, postData, function (response) {
                // Some stuff..
            }).error(function () {
                alert("errore chiamata ajax");
            }).fail(function () {
                alert("errore risposta ajax");
            });

No, non è una directory... Comunque ho risolto. Praticamente mi sono dovuto creare un wrapper, una classe che mi permetta di effettuare le chiamate ajax su classi contenenti metodi che estendono controlli. Insomma, il modello MVC.
 

Discussioni simili