it-swarm.com.de

Führe die Funktion in com_content mit ajax aus - rufe sie nicht korrekt auf

Ich habe dieses Tutorial befolgt, um ein AJAX Anmeldeformular zu erstellen: http://www.mysite4u.net/joomla-articles/jquery-ajax-joomla-login.html

Aber ich kann es nicht zum Laufen bringen. Der Ajax-Aufruf funktioniert nicht. Es gibt mir diesen Fehler:

Nicht erfasster TypeError: Die Eigenschaft 'eingeloggt' von null kann nicht gelesen werden

Ich habe versucht, diese Dokumentation zu lesen, aber ich vermute, dass dies nicht die AJAX Komponente ist, und es wird nichts über das Aufrufen von Komponenten erwähnt: https: // docs.joomla.org/Using_Joomla_Ajax_Interface

Dies ist mein AJAX Aufruf:

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

Und die Funktion in components/com_content/views/article/view.ajax.php ("view.ajax.php" ist eine Datei, die ich erstellt habe):

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

Anscheinend hat mir ein wichtiger Teil gefehlt. Ich musste den "Login-Benutzer" task in view.ajax.php Wie folgt zum Switch hinzufügen:

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

Vielleicht habe ich Sie in Ihrer Frage falsch verstanden, aber im Verzeichnis com_content/views/article können/sollten Sie seitdem keine view.html.php-Datei erstellen hat ursprünglich eine gute view.html.php Datei.

In dem Tutorial, dem Sie folgen, sagt der Autor, dass Sie eine 'view.ajax.php' Datei im Ordner com_content/views/article erstellen sollen (nicht a view.html.php Datei). Möglicherweise verursacht dies Ihr Problem, da Sie für diesen Ajax-Aufruf eine falsche Datei erstellt haben.

Und wenn das nur ein Fehler in Ihrer Frage ist, dann möchten Sie vielleicht auch diese frühere Antwort über Ajax-Aufrufe in Joomla hier lesen (es ist besser, das hier nicht zu wiederholen): Was ist der richtige Weg, um eine zu machen?) AJAX Komponente aufrufen?

2
Zollie