Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
J'ai développé un systeme en AJAX qui affiche un conseil au démarrage du site. Pour cela j'utilise Ajax.Request qui se declenche a la fin du chargement de la page. Tout fonctionne très bien en local mais dès que j'ai fait la mise en ligne, rien ne se passe?
J'ai testé un peu pour voir ce qui pouvait se passer mais je ne comprend vraiment pas car la fonction Ajax.Request fait bien appel à mon action index/notice et la parcoure correctement jusqu'a la fin. Mais dans le OnSuccess il ne se passe rien et je vous avoue que là je sèche.
Auriez vous une idée de ce qui peut manquer et qui fait que ça pourrait fonctionner en local mais pas en ligne?
Voici le code:
IndexController
<?php class IndexController extends Zend_Controller_Action { function init() { $this->initView(); $this->view->user = Zend_Auth::getInstance()->getIdentity(); $this->_AjaxContext = $this->_helper->getHelper('AjaxContext'); $this->_AjaxContext ->addActionContext('notice','json') ->addActionContext('base-url','json') ->initContext('json'); } public function noticeAction() { $db = Zend_Registry::get('dbAdapter'); $select = $db->query('SELECT * FROM notice ORDER BY RAND() DESC LIMIT 1'); //$select = $db->query('SELECT * FROM notice'); $result = $select->fetchAll(); $this->view->notice = $result; } } ?>
Code Javascript
function notice(actionner) { if(actionner == 'nav') setCookie('notice',''); new Ajax.Request('index/notice', { method: 'get', onSuccess: function(transport) { alert("ok"); json = transport.responseText.evalJSON(); if(!(getCookie('notice') == 'viewed')) { new Effect.Opacity('container', { from: 1, to: 0.7, duration: 0.5 }); new Effect.Appear('notice', { from: 0, to: 1, duration: 0.5 }); $('notice_content').innerHTML = json.notice[0].notice; dtCurrent = new Date(); dtExpiration = new Date(dtCurrent.getUTCFullYear(),dtCurrent.getUTCMonth(),dtCurrent.getUTCDate()); dtExpiration.setTime(dtExpiration.getTime() + 86400000); setCookie('notice','viewed',dtExpiration); childNodes = $('container').childNodes; for(i=0;i<childNodes.length;i++) { for(j=0;j<childNodes[i].attributes.length;j++) { if(childNodes[i].attributes[j].nodeName == 'id') { new Effect.Fade(childNodes[i].attributes[j].nodeValue, { from: 1, to: 0.7, duration: 0.5 }); } } } } }, onFailure{ alert("Erreur javascript");} }); }
Et pour finir le code de vue:
<body onLoad="notice('body');">
Merci de votre aide
Hors ligne
Salut,
ne devrais-tu pas ajouter /format/json à ton url ?
new Ajax.Request('index/notice/format/json', {
Hors ligne
Merci pour ton aide mais ça ne fonctionne pas . Ce que je trouve vraiment bizarre c'est que localement aucun probleme et en ligne ça ne passe pas.
Hors ligne
Le probleme est partiellement resolu puisque j'arrive à faire tourner tout ça sous safari et firefox. Mais une erreur etrange apparait sous Internet Explorer: "Identificateur, chaine ou nombre attendu" et le code ne s'execute pas. J'ai lancé un autre sujet sur d'autres forums mais pour l'instant rien de constructif... Je trouve quand même tout celà etrange que Ajax.Request ne fonctionne pas sous IE...
Hors ligne
Salut,
dis donc, je regarde un peu le code js/jquery (?) puisque ça doit venir de là, y'a un truc que je comprends pas
onFailure{ alert("Erreur javascript"); }
ce sera pas mieux de mettre
onFailure:function(){ alert("Erreur javascript"); }
?
je dis ça, je dis rien hein...
Hors ligne
il faut que tu affiche ce que te retourne ton serveur car il y a dedans une erreur js
souvent ça viens d'une , en trop apres le dernier élément d'un tableau ou des champs d'un objets js
IE est moins permissif que ces confrère sur ce sujet
{result: [ 'valeur1', 'valeur2', 'valeur3', 'valeur4', ]}
dans ce cas il ne faut pas de , apres 'valeur4' FF s'en fout mais IE plante
{result: { a: 'valeur1', b:'valeur2', c:'valeur3', d:'valeur4', }}
pareil dans ce cas
A+JYT
Hors ligne