web-dev-qa-db-fra.com

Exécuter function dans com_content avec ajax - ne l'appelle pas correctement

J'ai suivi ce tutoriel pour créer un formulaire de connexion AJAX: http://www.mysite4u.net/joomla-articles/jquery-ajax-joomla-login.html

Mais je ne peux pas le faire fonctionner. L'appel ajax ne fonctionne pas. Cela me donne cette erreur:

Uncaught TypeError: impossible de lire la propriété 'connectée' de null

J'ai essayé de lire cette documentation, mais j'imagine que ce n'est pas le composant AJAX qui est utilisé dans celui-ci, et il ne mentionne rien sur l'appel de composants: https: // docs.joomla.org/Using_Joomla_Ajax_Interface

Ceci est mon appel AJAX:

form = jQuery('#userForm'); 

jQuery.ajax({
    url: 'index.php?option=com_content&format=ajax&view=article&task=loginUser&tmpl=component',
    type: 'post',
    dataType: 'html',
    data: {
        form: jQuery(form).serializeArray()
    },
    async: true,
    success: function(response){
        console.log(response);
        var result = jQuery.parseJSON(response);

        if ( result.loggedIn == 1 ) {                   
            //User logged in                    
        }
        else {                  
            //User not logged in                    
        }               
    }
});

Et la fonction à l'intérieur components/com_content/views/article/view.ajax.php _ ("view.ajax.php" est un fichier que j'ai créé):

public function _logInUser( $form ){
    $options = array();
    $credentials = array();

    $credentials['username'] = $form[0]['value'];
    $credentials['password'] = $form[1]['value'];

    $result = JFactory::getApplication()->login($credentials, $options);        
    $result = ($result) ? 1 : 0;

    //1     - logged in
    //0     - not logged in     
    echo json_encode( array('loggedIn' => $result) );                   
    jexit();
}
2
JonasB

Apparemment, il me manquait une partie importante. J'avais besoin que "l'utilisateur de connexion" task soit ajouté au commutateur dans view.ajax.php Comme:

function display($tpl = null)
{       
    $task = JRequest::getString('task');        
    switch( $task ){                        
        case "registerNewUser":         
            $this->_registerNewUser( JFactory::getApplication()->input->post->get('form', NULL, 'ARRAY') );             
            break;
        case "loginUser":           
            $this->_logInUser( JFactory::getApplication()->input->post->get('form', NULL, 'ARRAY') );               
            break;
    }       
    jexit();                
}
3
JonasB

Je vous ai peut-être mal compris dans votre question mais dans le répertoire com_content/views/article, vous ne pouvez pas/ne devriez pas créer de fichier view.html.php , car a à l'origine un bon fichier view.html.php.

Dans le tutoriel que vous suivez, l’auteur dit que vous devez créer un fichier 'view.ajax.php' dans le dossier com_content/views/article view.html.php). Peut-être que cela cause votre problème puisque vous avez créé un fichier incorrect pour cet appel ajax.

Et s’il s’agit là d’une erreur dans votre question, vous voudrez peut-être aussi étudier cette réponse précédente concernant les appels en ajax dans Joomla (il est préférable de ne pas le répéter ici): Quelle est la bonne façon de créer AJAX appel dans le composant?

2
Zollie