Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Débutant avec Mootools et le Zend Framework, je rencontre quelques difficultés à implémentier le premier dans le second...
Je souhaiterai, lors d'un clic sur un lien, enregistrer dans ma base de données des informations via une requête Ajax.
Mon code javascript :
function addVideo(id_yt) { var url = "<?php echo $this->baseUrl() ?>/video/addVideo/id_yt/"+id_yt; new Ajax(url, { method: 'get', headers: {'X-Requested-With': 'XMLHttpRequest'}, onSuccess: function(data) { $('add_video_'+id_yt).set('text', 'Vidéo ajoutée !'); }, onFailure: function() { $('add_video_'+id_yt).set('text', 'Erreur durant l\'enregistrement !'); } }).request(); /*.send()?*/ }
Firebug me renvoit l'erreur suivante Ajax is not defined.
Une fois que ce problème sera réglé, je n'aurais juste qu'à faire dans mon action "addVideo" situé dans mon controller "video",
un $id_video = $this->_request->getParam('id_yt');
, pour récupérer l'id de la vidéo et pouvoir effectuer l'enregistrement?
D'avance merci,
Stranger
Dernière modification par Stranger (10-08-2008 19:17:05)
Hors ligne
Je débute sur mootools 1.2, mais je connais pas la class Ajax(), je fais les requetes avec Request :
EDIT: d'apres http://www.ajaxline.com/mootools-1-2-beta-1 Ajax et Remote sont pour mootools 1.1
var url = 'html/'+controller+'/update/id/' + el.get('rel') + '/'+el.get('headers')+'/' + el.get('text') + '/format/ajax'; var request = new DWRequest({ url:url, method:'get', onRequest: function() { console.info('(UPDATE) : making ajax call :: ' + url); }, onFailure: function(instance) { console.warn( url + ': ' + instance.statusText); } }).send();
A la fin de l'url il y a le parametre format="ajax", ca permet au zend framework d'activer le contexte Ajax automagiquement (ca desactive le layout et envoie les bons headers).
Par contre il ne faut pas oublier de creer la bonne vue mais bon pour un envoi je sais pas si ca sert.
Dans l'init du controleur :
public function init() { .......... // *** Contexte des vues $contextSwitch = $this->_helper->getHelper('contextSwitch'); if ( ! $contextSwitch->hasContext('ajax') ) { $contextSwitch->addContext('ajax', array( 'suffix' => 'ajax' )); $contextSwitch->addActionContext('read','ajax')->initContext(); // read un objet recuperable par js $contextSwitch->addActionContext('update','ajax')->initContext(); // inline edit } }
Les vues doivent s'appeller read.ajax.phtml et update.ajax.phtml ou .tpl si t'utilises un autre moteur de templates.
Dernière modification par fte (08-08-2008 18:42:47)
Hors ligne
Ok merci, je teste çà dès demain, pour ce soir je sature!
Hors ligne
Bon çà avance
Mais maintenant j'ai une erreur...
uncaught exception: [Exception... "Component returned failure code: 0x80070057 (NS_ERROR_ILLEGAL_VALUE) [nsIXMLHttpRequest.open]" nsresult: "0x80070057 (NS_ERROR_ILLEGAL_VALUE)" location: "JS frame :: http://localhost/js/mootools-1.2-core.js :: anonymous :: line 324" data: no] Line 0
J'ai fait quelques recherches mais nada...
Mon code JavaScript :
var url = "<?php echo $this->baseUrl() ?>/video/addVideo/id_yt/"+ id_yt +"/format/ajax"; var myRequest = new Request(url, { method: 'get', headers: {'X-Requested-With': 'XMLHttpRequest'}, onRequest: function() { console.info('(SAVE) : making ajax call :: ' + url) }, onSuccess: function(data) { $('add_video_'+id_yt).set('text', 'Vidéo ajoutée !'); }, onFailure: function() { //$('add_video_'+id_yt).set('text', 'Erreur durant l\'enregistrement !'); console.warn( url + ': ' + instance.statusText); } }).send();
Hors ligne
Oups precision pour ceux qui lisent le fil : dans mon exemple j'avais mis DWRequest (cf le blog de David Walsh) qui est une classe qui hérite de Request et les console.*() c'est pour firebug.
Pour l'exception j'ai pas d'idée car je débute mais est ce que t'as téléchargé ton core avec le module Request ?
http://www.mootools.net/core
Hors ligne
Ouep j'ai tout pris pour être tranquille...
Bon bah vais continuer à chercher hein... ^^
Hors ligne
Hello,
Ton problème vient sans doute du fait que tu passes deux paramètres à l'instanciation de la classe Request qui en attend qu'un seul.
En gros ce code :
var myRequest = new Request(url, { method: 'get', headers: {'X-Requested-With': 'XMLHttpRequest'}, onRequest: function() { console.info('(SAVE) : making ajax call :: ' + url) }, onSuccess: function(data) { $('add_video_'+id_yt).set('text', 'Vidéo ajoutée !'); }, onFailure: function() { //$('add_video_'+id_yt).set('text', 'Erreur durant l\'enregistrement !'); console.warn( url + ': ' + instance.statusText); } }).send();
devient :
var myRequest = new Request({ url: url, method: 'get', headers: {'X-Requested-With': 'XMLHttpRequest'}, onRequest: function() { console.info('(SAVE) : making ajax call :: ' + url) }, onSuccess: function(data) { $('add_video_'+id_yt).set('text', 'Vidéo ajoutée !'); }, onFailure: function() { //$('add_video_'+id_yt).set('text', 'Erreur durant l\'enregistrement !'); console.warn( url + ': ' + instance.statusText); } }).send();
Tu peux voir la documentation ici : http://docs.mootools.net/Request/Request
Dans la version 1.2, ils ont simplifié au maximum le passage des paramètres (le JSON étant ensuite interpreté par setOptions()).
J'ai pas testé le nouveau code, hésite pas à reposter si problème.
see u
PS: ton option "headers" semble facultative.
Dernière modification par thoas (10-08-2008 15:45:09)
Hors ligne
Nikel merci bien
Et effectivement le header ne sert à rien...
Encore merci pour votre aide!
Hors ligne