2010-09-12 5 views
2

je me suis une fonction javascript qui vérifie d'abord si le nom d'utilisateur est la longueur requise et que envoie le nom d'utilisateur à une page pour un test si le test est un succès, il y aura un <span id="username">true</span> autre <span id="username">false</span>jquery getElementById sur une donnée ajax

Je continue à obtenir une erreur getElementById n'existe pas sur les données de retour

function checkuser(user, wd,id, sub) 
    { 
     if(user.length < 7) 
     { 
      document.getElementById(id).innerHTML = "Your username is too short. It must be longer than 6 charaters"; 
      document.getElementById(sub).disabled = true; 
      return false; 
     } else { 
      $.post(wd + "register/checkuser/" + user, 
         function(data){ 
         alert("Data Loaded: " + data.getElementById('username').innerHTML; 
         }); 
     } 
    } 
+0

Obtenez-vous une erreur avec data.getElementById()? –

+0

Changez 'data.getElementById ('nom d'utilisateur'). InnerHTML;' en 'document.getElementById ('nom d'utilisateur'). InnerHTML = données;' Lisez le commentaire d'@ Amber! – RobertPitt

Répondre

1

Vous devez faire ceci:

function checkuser(user, wd, id, sub) { 
    if(user.length < 7) { 
    $("#"+id).html("Your username is too short. It must be longer than 6 characters"); 
    $("#"+sub).attr("disabled", true); 
    return false; 
    } 
    else { 
    $.post(
     wd + "register/checkuser/" + user, 
     function(data){ 
     alert("Data Loaded: " + $(data).find("#username").html()); 
     } 
    ); 
    } 
} 
+0

merci, il a travaillé – Ken

4

La data valeur de retour est une chaîne, pas un DOMDocument - donc il ne dispose pas d'un plaisir membre getElementById ction.

Une meilleure idée serait de renvoyer JSON à la place, et d'analyser cela.

Si vous ne pouvez pas modifier la page qui effectue le test/le retour, vous devez trouver un autre moyen d'analyser la chaîne de retour qui vous convient.

+0

'data' n'est pas * toujours * une chaîne, n'est-ce pas? Cela dépend du type de la réponse et si vous avez défini 'dataType': http://api.jquery.com/jQuery.ajax/ Ce sera une chaîne si la réponse est HTML, et JSON est absolument le moyen de aller pour ce genre de réponse. –

+0

Mais de toute façon, c'est une chaîne de caractères ou des données json, mais n'est toujours pas dans le DOM et n'aura pas getElementById() –

+0

& Marc: Je ne peux pas l'essayer maintenant, mais si vous récupérez XML (ou set 'dataType'), n'obtenez-vous pas un DOMDocument contenant le document XML? (Tentatives avec JSBin échoué, mais cela semble être ce que les docs suggèrent.) Encore une fois, c'est un point de côté, tout à fait d'accord avec Amber que JSON est la meilleure façon d'aller ici. –

2

Essayez ceci:

function(data){ 
     alert("Data Loaded: " + $('#username', data).html()); 
    }); 

Ou ce, en fonction de la structure du code HTML retourné:

function(data){ 
     alert("Data Loaded: " + $(data).filter('#username').html()); 
    }); 
+0

le premier a parfaitement fonctionné grâce – Ken