2010-08-16 3 views
2

j'ai écrit mon propre script php captcha, avec un en-tête jpeg, afin que je puisse direUtilisez appel ajax jQuery pour rafraîchir un captcha

<img src="captcha.php"> 

qui fonctionne en stockant la valeur du captcha dans la variable de session. Quand l'utilisateur ne peut pas le lire, je veux qu'il soit rafraîchissant.

j'ai essayé

$("#refresh").click(function() { 
    $("#captcha").attr("src","captcha.php"); 
}); 

mais bien sûr cela n'a pas de sens, et je dois faire un appel ajax à la place. Comment recommanderiez-vous tous que je le fais?

P.S. J'ai aussi essayé

$.ajax({ 
    url: "captcha.php", 
    success: function(result) { 
     $("#captcha").attr("src",result); 
    } 
}); 
+0

Peut-être, avec la première tentative, ajouter une chaîne de requête à l'url du script php pourrait fonctionner à la place? –

+0

Eh bien le problème avec la première méthode est que PHP est exécuté côté serveur avant de faire quoi que ce soit, donc faire un appel à un script php après le chargement de la page ne fonctionnera tout simplement pas. Si je pouvais trouver un moyen avec ajax (comme le deuxième exemple), cela pourrait fonctionner ... – codersarepeople

+0

Avoir le script de génération captcha afficher la suite complète des en-têtes "sans cache" en plus de l'ajout de la variable de requête aléatoire, pour faire sûr que possible qu'une nouvelle copie de l'image est récupérée à chaque fois. –

Répondre

5

La première méthode fait réellement sens pour moi:

$("#refresh").click(function() { 
    $("#captcha").attr("src","captcha.php?r=" + Math.random()); 
}); 

Je suppose que la seule chose captcha.php est de stocker la valeur captcha dans la variable de session et de sortir l'image captcha, chaque fois qu'il est accédé. Ainsi, lorsque vous définissez à nouveau le src de l'image et y ajoutez une variable de chaîne de requête, une requête sera de nouveau envoyée au script du serveur "captcha.php", qui régénèrera alors le captcha et le store la nouvelle valeur dans la variable de session.

0

Il est logique de stocker la chaîne de CAPTHCHA réelle dans la variable _SESSION, mais vous devez spécifier explicitement l'état dans l'URL:

$.ajax({ 
    url: "captcha.php?generateNew", 
    success: function(result) { 
     $("#captcha").attr("src","captcha.php?foo="+Math.random()); 
    } 
}); 

dans votre php-file:

if(isset($_GET['generateNew']){ 
    $_SESSION['captchaString'] = generateCaptchaString(); 
}else{ 
    dumpCaptchaImage(); 
} 
Questions connexes