Почему вызов ajax не удался. Код ниже перенаправляет на authenticate.php вместо echoeing text на login.html

Это разметка

<div>
 Competitive Exams 
</div>

<div>
 <form action="authenticate.php" method="get" id="login"> 
 <ul>
 <li id="b9">Login</li>
 
 
  
 </ul>
 </form> 
</div>
 
<div>
 Copyright © 2013.All Rights Reserved.Created by :HACKSHAK & I-GOOGLEPLAY. 
</div>

/Это код javascript для ajax call/

window.onload = function(){
var form = document.getElementById('login');
var output = document.getElementById('show'); 

form.onsubmit = function(e){
 e.preventDefault(); 
 var action = form.action;
 var method = form.method;
 var data = {};
 var names = document.querySelectorAll('#login [name]');

 for(var i=0;i<2;i++){
 var name = names[i].name;
 var value = names[i].value;
 data[name] = value;
 }

 var transmit = new Transmit(method,action,data,output).bind(transmit);

}

function Transmit(method,action,data,output){
 this.method = method;
 this.action = action;
 this.data = data;
 this.output = output;

 var xhr = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
 alert(xhr);
 xhr.onreadystatechange = function(){
 if(xhr.readyState == 4 && xhr.status == 200){
 this.output.innerHTML = xhr.responseText;
 this.output.style.display = "inline-block"; 
 }
 }

 xhr.open(this.method,this.action?this.data,true); 
 xhr.send();
}

}, когда я запускаю код даже после предотвращения по умолчанию поведения формы, он перенаправляется на authenticate.php вместо создания ajax-вызова.

1 ответ

С консоли консоли JS:

Uncaught SyntaxError: Неожиданный токен,

Вы начинаете тернарный оператор здесь, но не завершаете его:

xhr.open(this.method,this.action?this.data,true);

Следовательно, функция, которую вы назначаете для onload никогда не получает должным образом синтаксический анализ, поэтому ее никогда не назначают, поэтому вы никогда не назначаете свое событие отправки.

Похоже, вы пытаетесь построить строку запроса, но совершенно неправильно.

Вам нужно зациклиться на объекте, encodeURIComponent все ключи и значения, а затем объединить их (через +), используя = и & символы перед конкатенацией (снова с +) в действие и строку "?" ,

Аутентификация обычно должна выполняться с помощью запроса POST, а не запроса GET.

licensed under cc by-sa 3.0 with attribution.