2010-10-09 10 views
2

Cela pourrait spund un peu drôle, ne savait même pas comment mettre le titre au début. Cela peut être dû à de longues heures de travail ou je fais juste quelque chose de mal.

J'ai un fichier, dire comment.php, qui contient quelque chose de similaire à:

var params = $('form#myform').serialize(); 
$.get("/ajax/file.php?"+params, function(data){ 
    if (data == 'error') { 
     $('#message').html('Error'); 
    } else if (data == 'success') { 
     $('#message').html('Success'); 
    } 
}); 

Je l'ai vérifié avec Firebug et tout est ok, pas d'erreur de JS, le fichier est appelé et retourne soit ' erreur 'soit' succès ', mais encore, dans le corps de l'appel ajax données ne correspond pas à la réponse du serveur. J'ai ensuite changé

if (data == 'error') { 
    $('#message').html('Error'); 
} else if (data == 'success') { 
    $('#message').html('Success'); 
} 

avec

if (trim(data) == 'error') { 
    $('#message').html('Error'); 
} else if (data == 'success') { 
    $('#message').html('Success'); 
} 

où (garniture ) est une fonction que j'ai écrit qui supprime tous les espaces avant ou après la chaîne. J'ai essayé aussi l'esprit le fichier étant appelé écho numéros et de faire le chèque avec jQuery comme:

if (data == 1) { 
    $('#message').html('Error'); 
} else if (data == 'success') { 
    $('#message').html('Success'); 
} 

sans résultats. Si je seulement alerte (données) tout semble très difficile. Les deux fichiers sont sur le même domaine. Mon code est exactement comme dans l'exemple juste que j'ai plus de conditions if/else et que l'une d'entre elles devrait toujours correspondre (c'est le cas si je regarde dans firebug). J'ai également essayé d'utiliser une instruction sans résultat.

J'utilise cette méthode depuis un certain temps et je n'ai jamais eu de problème. Des idées?

+0

Je voudrais essayer _alert (typeof data) _ pour voir le type (et éventuellement spécifier le paramètre jquery _dataType_). Aussi, faites attention au cas (supérieur/inférieur) des caractères. –

+0

Désolé, juste vu cela, nouveau autour d'ici :) Merci pour l'aide, gardez cela à l'esprit! – Claudiu

Répondre

2

Le .get() rappel de rappel utilise 3 arguments:

  1. les données
  2. l'état
  3. XMLHttpRequest

Donc, vous êtes méthode devrait fonctionner. Assurez-vous de faire attention à la capitalisation, la ponctuation et les espaces.

J'essayer d'obtenir plus d'informations sur data pour identifier le problème:

var params = $('form#myform').serialize(); 
$.get("/ajax/file.php?"+params, function(data){  
     alert("Type: " + typeof.data + 
       "\nContents: ==>" + data + "<==" + 
       "\nTrim: ==>" + $.trim(data) + "<=="); // get more info 
}); 

Notez que jQuery a une fonction $.trim()

+0

Je ne pense pas que cela répond vraiment à la question pourquoi la comparaison échoue: _ "Si je ne fais qu'alerte (données) tout semble bien dur." _ –

+0

Merci pour le conseil, mais comme Nikkita l'a dit, ce n'est pas mon problème. Le fichier que j'appelle fait écho à une chaîne, qui peut être l'un de 'email', 'nom', 'message' et ainsi de suite. Quand j'appelle alert (données) dans ma fonction de rappel, il dit 'email', 'nom' ou autre chose, mais il échoue sur la comparaison, comme si (data == 'email') alert ('email'); Et merci pour l'astuce de la fonction $ .trim() :) – Claudiu

+0

@Claudiu - C'est bizarre. J'essaierais d'en savoir plus sur 'data'. Juste l'alerter avec divers morceaux d'information, cela devrait vous faire voir pourquoi la correspondance ne fonctionne pas. Etes-vous sûr que vous avez bien l'orthographe et la capitalisation? –

0

Vous ne devez pas ajouter le sérialisé données à la chaîne de requête comme ça. $ .get() prendra trois arguments, l'un d'eux est une version sérialisée (chaîne de requête) des données ou un hachage. Cependant, ce n'est pas pourquoi vous êtes ici.

Les données correspondent à la page imprimée. Imprimez-vous réellement le mot "erreur" ou "succès" de cette page? Si non, alors ce que vous essayez de faire ne va pas travailler.

Le rappel de succès prend trois arguments: data, textStatus (response) et xhr.Et si:

$.get("/ajax/file.php", $("#myform").serialize(), function (data, status) { 
    if (status == 'error') { 
     $('#message').html('Error'); 
    } 
    else if (status == 'success') { 
     $('#message').html('Success'); 
    } 
}); 
+0

Vous réalisez que vous me dites essentiellement la même chose que Peter, n'est-ce pas? Encore, merci pour l'aide avec l'envoi des paramètres, je pensais que la seule autre solution est avec $ .get ('file.php', {key: value} .... – Claudiu

+0

Désolé, nous avons posté à peu près au même moment. Je me rends compte qu'il y a un chevauchement d'informations, mais je pensais que ma mention des autres paramètres était assez pertinente (j'avais ça avant son édition :)). –