it-swarm.com.de

Probleme mit Ajax-Aufruf in der Komponente

Ich entwickle eine Joomla-Komponente. Ich habe einen Drag & Drop-Uploader mit Ajax hinzugefügt. Wenn eine Datei hochgeladen wird, sollte eine Bestätigungsmail gesendet werden. Ich erhalte das richtige Element der Datenbank mit $id = $app->input->getInt('id'); Dies funktioniert, aber wenn der Ajax-Aufruf abgeschlossen ist, wird die Variable $id ist auf null gesetzt, daher wird in der E-Mail der $customers->name ist auch null. Warum wird das komplette Modell nach dem Ajax-Aufruf neu geladen?

Ich nenne die Controller-Methode:

Ajax-Anruf

$.ajax({
    cache: false,
    url: "index.php?option=com_customercenter&task=mailAfterUpload&tmpl=component",
    dataType: "json",
    formData: {"companyID":"companyID"},
    success: function(data) {
        for(var i=0;i<data.length;i++) { 
            obj.createProgress(data[i]["name"],data[i]["path"],data[i]["size"]);
        }
    }
});

Regler

public function mailAfterUpload() {
    $model = $this->getModel();
    $response = $model->sendEmailAfterUpload();
}

Modell

public function sendEmailAfterUpload() {
    $customers = $this->getCustomercenterData();

    $mailer = JFactory::getMailer();
    $config = JFactory::getConfig();
    $sender = array( 
        $config->get( 'mailfrom' ),
        $config->get( 'fromname' ) 
    );

    $mailer->setSender($sender);

    $user = JFactory::getUser();
    $recipient = $sender;

    $mailer->addRecipient($recipient);

    $body = "Der Kunde: <b>" . $customers->name . "</b> hat neue Daten übermittelt<br>Ordner '" . $customers->upload_folder . "' checken" ;
    $subject = $customers->name . " hat neue Daten übermittelt";
    $mailer->isHTML(true);
    $mailer->Encoding = 'base64';
    $mailer->setSubject($subject);
    $mailer->setBody($body);

    $send = $mailer->Send();
    if ( $send !== true ) {
        echo 'Error sending email: ' . $send->__toString();
    } else {
        echo 'Mail sent';
    }
}

Modell SQL-Abfrage

$app = JFactory::getApplication('site');
$id = $app->input->getInt('id');
1
onclesam

Standardmäßig ist jede http-Anforderung unabhängig. Sie müssen bei jedem Aufruf alle Parameter erneut senden.

Wenn Ihr Client Sitzungscookies speichern kann, können Sie alternativ serverseitige Variablen in der Benutzersitzung speichern, um den Status zwischen http-Anforderungen beizubehalten.

$session = JFactory::getSession();
$session->set('myId', $myId);
...
$session = JFactory::getSession();
$myId = $session->get('myId');
2
Anibal