2010-07-30 4 views
0

En bas de mon index.php, j'ai une fonction Javascript entre les étiquettes appariées <script>. J'ai un gestionnaire de clic qui appelle la fonction qui fait une demande Ajax Prototype.js.Prototype Ajax.Request ne s'exécutant pas dans certains cas

Cette version ne fonctionne pas (aucune demande n'est faite), bien que le myFunction lui-même soit appelé.

function myFunction(fr, fw) { 
    new Ajax.Request('/ascript', { 
     method: 'post', 
     parameters: { a: fr, b: fw }, 
     onSuccess: function(transport) { }, 
     onFailure: function(request) { } 
    }); 
} 

Cependant, lorsque j'ajoute l'alerte ("quelque chose"); ligne le script php ascript est appelé.

function myFunction(fr, fw) { 
    new Ajax.Request('/ascript', { 
     method: 'post', 
     parameters: { a: fr, b: fw }, 
     onSuccess: function(transport) { alert("here"); }, 
     onFailure: function(request) { } 
    }); 
} 

Est-ce que ce serait un problème d'espace blanc? Y a-t-il une erreur dans ma syntaxe?

+0

Comment savez-vous que la demande n'est pas faite? Avez-vous essayé d'installer le plugin Firefox "TamperData" pour suivre les requêtes HTTP, ou même Firebug? Le simple fait de modifier le rappel comme cela ne devrait pas avoir d'impact sur la question de savoir si la requête HTTP est faite, donc soit * est * en cours, soit il y a quelque chose d'autre à propos du second test. – Pointy

+0

Le script où la requête est faite est le mien, et j'ai des phrases error_log là, je peux voir qu'il n'est pas exécuté. – texmex5

Répondre

0

J'ai donc trouvé le problème. Le problème était dans la façon dont j'ai ajouté le eventhandler à mon « bouton »

Dans un premier temps (sur les deux exemples donnés dans ma question) j'avais:

echo "<a href='' ><p id='button' onclick='myFunction(" .$a .", " .$b.");'>Click</p></a>"; 

Les environs <p> avec une étiquette de lien était ofcourse une mauvaise idée ...

Cela fonctionne:

echo "<a href='' onClick='Event.stop(event);'><p id='button' onclick='myFunction(" .$a .", " .$b .");'>Click</p></a>"; 

Merci à tous pour vos réponses. Je suppose que la morale de l'histoire est, regardez plus loin du Javascript lui-même, regardez où il s'appelle et ce qui pourrait être cassé là.

0

Vous devriez essayer l'événement onComplete. Prototype ne tombent parfois pas dans l'une ou onSuccessonFailure cependant toute demande sera couverte par onComplete

essayer aussi envelopper la demande ajax avec bloc Try - Catch, il pourrait aider.

+0

try catch n'a pas aidé, ajoutant alerte ("Blah") à onComplete se termine dans le même résultat - la chose commence à travailler. Mais je ne veux pas montrer une alerte à chaque fois que la requête se termine :) – texmex5

Questions connexes