J'ai une application Web qui se connecte à un autre service Web et peut effectuer certaines actions pour un utilisateur. J'utilise codeigniter et jQuery. J'ai mis en place un contrôleur en codeigniter spécifiquement pour gérer les requêtes ajax. Le contrôleur fait tout ce dont il a besoin, puis echo
sson. L'appel ajax ci-dessous est censé prendre le nom d'utilisateur et le mot de passe pour l'autre service Web et les envoyer à mon contrôleur ajax. Le contrôleur utilise les valeurs pour tenter de se connecter à l'autre service (en utilisant curl). La réponse de JSON reflète si la connexion a été réussie ou non.jQuery La réponse ajax s'affiche dans le navigateur au lieu d'être transmise à la fonction de rappel
Mon problème est que parfois mon navigateur est redirigé vers le contrôleur ajax, donc la réponse json est echo
ed au navigateur. Je ne peux pas identifier pourquoi ou quand cela se produit. Lorsque cela se produit, la fonction success
n'est pas appelée.
/* Verify login credentials
*
* @param username, password
* @param activityElement - element in which to place activity indicator
* @param location - location to refresh after success
* @return none
*/
function verify_login(username, password, activityElement, location)
{
$.ajax({
type: 'POST',
url: '<?=site_url('ajax/eval_login')?>',
data: { username: username, password: password },
beforeSend:function() {
window.savedHtml = $(activityElement).html();
$(activityElement).html('<div id="activity"></div><div class="text-center">Verifying </div>');
$('#activity').activity(); //neteye activity indicator plugin
},
success:function(data) {
data = $.parseJSON(data);
if (data.success) {
$(activityElement).html(window.savedHtml);
//fades in success message then performs function
set_message('Success!',function() {
alert(location);
window.location.href = "<?=site_url()?>/" + location;
});
} else {
$(activityElement).html(window.savedHtml);
set_message(data.error);
}
$('#activity').activity(false);
set_clicks();
},
error:function(){
set_message('<strong>Oops!</strong> Try that again in a few moments.</p>');
$('#activity').activity(false);
$(activityElement).html(window.savedHtml);
}
});
}
Modifier: Je suis assez confus. Je ne semble pas vraiment la demande ajax est la question ... n'a pas de sens pour moi
marchant à travers elle à nouveau ..
- demande est envoyée avec le
.ajax
appel - parfois tout fonctionne comme prévu (la demande revient, ui est mis à jour)
- parfois le navigateur va juste à
http://yadayada.local/index.php/ajax/eval_login
où la bonne réponse json est affichée (voir la capture d'écran ci-dessous ..). Il est intéressant que la réponse correcte de JSON soit affichée. Si le navigateur était simplement redirigé il n'y aurait pas de sortie depuis$_POST
serait vide ...
screenshot http://i45.tinypic.com/111nyhl.png
Par ailleurs le rappel 'beforeSend' n'est pas destiné à jouer avec l'interface utilisateur, mais pour accéder aux en-têtes de la requête brute avant l'envoi - il suffit de mettre ces lignes après l'appel ajax. – moonwave99
Installez le plugin HTTP Headers pour FF et laissez-le "toujours en haut". Vous serez en mesure d'enregistrer toutes les demandes et réponses. Avec un peu de chance, vous comprendrez où est le problème. – martincho