2016-09-30 1 views
-2

Je souhaite appeler un script JS dans une réponse Ajax. Ce qu'il fait est de passer le script document.getElementById à l'Ajax responseText.Exécuter le script Javascript à partir de la réponse ajax

Le code actuel me retourne cette erreur: Uncaught TypeError: Cannot set property 'innerHTML' of null

Cela se fait avec Visual Studio Cordova ..

Ajax:

$("#loginBtn").click(function() { 
    var username = document.getElementById("username").value; 
    var password = document.getElementById("password").value; 
    var xmlhttp = new XMLHttpRequest(); 
    xmlhttp.onreadystatechange = function() { 
     if (this.readyState == 4 && this.status == 200) { 
      document.write(this.responseText); 
     } 
    } 
    xmlhttp.open("POST", "http://www.sampleee.esy.es/login.php", true); 
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    xmlhttp.send("username=" + username + "&" + "password=" + password); 
}); 

PHP:

if($count == 1){ 
    echo "document.getElementById('alertBox').innerHTML = 'Login Success!'; 
     document.getElementById('alertBox').className = 'alert alert-success'; 
     document.getElementById('alertBox').style.display = 'block'; 
     setTimeout(function() { 
       window.location.href = '../html/dashboard.html'; 
      }, 1000); 
     "; 
}else{ 
     echo "document.getElementById('alertBox').innerHTML = 'Invalid login details'; 
     document.getElementById('alertBox').className = 'alert alert-danger'; 
     document.getElementById('alertBox').style.display = 'block'; 
     "; 
} 
+0

L'élément avec l'identifiant 'alertBox' n'est pas dans le DOM au moment où vous y accédez et essayez de définir' innerHTML'. L'ajoutez-vous quelque part avant l'appel ajax? sinon, vous devez le faire en premier. – varontron

+0

Je pense qu'il serait plus facile d'avoir le PHP juste retourner un indicateur de succès/échec et avoir le test Ajax JS existant qui retourne la valeur et afficher le message approprié avec la classe appropriée. De plus, étant donné que vous utilisez jQuery, pourquoi codifiez-vous votre propre appel Ajax au lieu d'utiliser '$ .ajax()'? – nnnnnn

+0

vous devez créer un élément de script, puis ajouter le texte de la réponse, puis ajouter l'élément au DOM –

Répondre

0

Vous pouvez le résoudre en changeant un petit, juste vous devez écrire le code de js sur le succès d'ajax que vous écrire en php page.on la page php il n'y a pas alertBox élément c'est pourquoi l'erreur est survenue.

Your Js code will be like this:-

$("#loginBtn").click(function() { 
var username = document.getElementById("username").value; 
var password = document.getElementById("password").value; 
var xmlhttp = new XMLHttpRequest(); 
xmlhttp.onreadystatechange = function() { 
    if (this.readyState == 4 && this.status == 200) { 
     if(this.responseText=="success"){ 
     document.getElementById('alertBox').innerHTML = 'Login Success!'; 
     document.getElementById('alertBox').className = 'alert alert-success'; 
     document.getElementById('alertBox').style.display = 'block'; 
     setTimeout(function() { 
     window.location.href = '../html/dashboard.html'; 
     }, 1000); 
     }elseif(this.responseText=="error"){ 
     document.getElementById('alertBox').innerHTML = 'Invalid login details'; 
    document.getElementById('alertBox').className = 'alert alert-danger'; 
    document.getElementById('alertBox').style.display = 'block' 
     } 
    } 
} 
xmlhttp.open("POST", "http://www.sampleee.esy.es/login.php", true); 
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
xmlhttp.send("username=" + username + "&" + "password=" + password); 
    }); 

And php code like:-

if($count == 1){ 
echo "success"; 
}else{ 
    echo "error"; 
    } 
+0

Pourquoi je ne pouvais pas avoir pensé à cela. Merci beaucoup! –

0

Fondamentalement, vous obtenez cette erreur parce que la chose que vous essayez de changer est pas sur la page lorsque vous chercher.

Ce que vous devez faire est, n'écrivez pas javascript avec PHP. Vous retournez quelque chose comme un int de php et ensuite l'utiliser pour décider ce que le javascript fait.

Vous avez le html sur la page et il suffit de changer le contenu à l'intérieur.

$("#loginBtn").click(function() { 
 
     var username = document.getElementById("username").value; 
 
     var password = document.getElementById("password").value; 
 
     var xmlhttp = new XMLHttpRequest(); 
 
     xmlhttp.onreadystatechange = function() { 
 
     if (this.readyState == 4 && this.status == 200) { 
 

 
      var str = this.responseText; //you may need to trim whitespace 
 
      var alert = document.getElementById('alertBox'); 
 
      if (str.trim() == 1) { 
 

 
       alert.innerHTML = 'Login Success!'; 
 
       alert.className = 'alert alert-success'; 
 
       alert.style.display = 'block'; 
 
       setTimeout(function() { 
 
       window.location.href = '../html/dashboard.html'; 
 
       }, 1000); 
 

 
      } 
 
      else { 
 

 
       alert.innerHTML = 'Invalid login details'; 
 
       alert.className = 'alert alert-danger'; 
 
       alert.style.display = 'block'; 
 

 
      } 
 
     } 
 
     xmlhttp.open("POST", "http://www.sampleee.esy.es/login.php", true); 
 
     xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
 
     xmlhttp.send("username=" + username + "&" + "password=" + password); 
 
     });
<div id="alertbox"></div>

Code PHP:

if($count == 1){ 
     echo 1; 
} 
else{ 
     echo 0; 
} 
+0

devrait couper la réponse lors de l'utilisation des chaînes dans php ... il est notoire pour ajouter des espaces supplémentaires – charlietfl

+0

Fait, mais je n'ai jamais eu ce problème cependant. –

+0

pas habituellement un problème si vous n'avez pas besoin de faire la comparaison de réponse – charlietfl

0

Utilisez eval comme ci-dessous

$("#loginBtn").click(function() { 
var username = document.getElementById("username").value; 
var password = document.getElementById("password").value; 
var xmlhttp = new XMLHttpRequest(); 
xmlhttp.onreadystatechange = function() { 
    if (this.readyState == 4 && this.status == 200) { 
     var fun = eval(this.responseText); 
    } 
} 
xmlhttp.open("POST", "http://www.sampleee.esy.es/login.php", true); 
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
xmlhttp.send("username=" + username + "&" + "password=" + password); 

});