web-dev-qa-db-fra.com

Problèmes avec un appel ajax dans le composant

Je développe un composant joomla. J'ai ajouté un uploader avec ajax. Lorsqu'un fichier est chargé, un courrier de confirmation doit être envoyé. J'obtiens le bon élément de la base de données avec $id = $app->input->getInt('id'); Cela fonctionne, mais lorsque l'appel ajax est terminé, la variable $id Est définie sur null, ainsi dans l'e-mail le $customers->name Est également null. Pourquoi le modèle complet est-il rechargé après l'appel ajax?

J'appelle la méthode du contrôleur:

Ajax Call

$.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"]);
        }
    }
});

Manette

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

Modèle

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

Modèle sql-query

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

Par défaut, chaque requête http est indépendante. Vous devez renvoyer tous les paramètres à chaque appel.

Sinon, si votre client peut conserver les cookies de session, vous pouvez alors stocker des variables côté serveur dans la session utilisateur pour conserver un état entre les demandes http.

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