2010-11-23 27 views
0

Ceci est mon code:javascript: comportement bizarre de == pour les chaînes

$.ajax({ 
    type: "POST", 
    url: "/myURL", 
    success: function(msg){ 
     alert(msg); 
     // aler prints success, but msg != "success" ???? 
     if (msg == "success") { 
      //my code 
     } else { 
      //other code 
     } 
    } 
}); 

Quelque chose weired arrive: le succès des impressions de dialogue d'alerte, mais msg = "succès". Qu'est-ce que je rate? Ma méthode php renvoie simplement "succès" ou "échec" en fonction d'une action.

+7

Est-il possible que la sortie de '/ myUrl' renvoie un succès avec un espace blanc de début ou de fin? –

Répondre

1

mettre avant conditionals:

msg= jQuery.trim(msg).toLowerCase(); 

En supposant par votre code que vous utilisez JQuery

0

Il peut y avoir un espace blanc autour du texte.

Je peux suggérer que pour une manière robuste de résoudre ce problème, renvoyer des données dans un format spécifique tel que JSON.

Ajouter

dataType:'json' 

à votre configuration de .ajax $, et que la sortie de PHP

header('Content-Type: application/json'); 
echo json_encode(array('msg'=>'success')); 

ou 'msg'=>'failure' pour l'autre possibilité, bien sûr.

Puis dans la JS,

success: function(data){ 
    alert(data.msg); 
    if (data.msg == "success") { 
     //my code 
    } else { 
     //other code 
    } 
1

Essayez:

if (msg.trim().toLowerCase() == "success") 
{...} 

Vous devrez peut-être pr ototype une méthode trim si elle n'est pas prise en charge cross-browser.

1

Simplement, vous pouvez utiliser === pour la comparaison. Peut être utile.