Javascript 为什么ajax调用失败。下面的代码重定向到authenticate.php,而不是将文本回显到login.html

Javascript 为什么ajax调用失败。下面的代码重定向到authenticate.php,而不是将文本回显到login.html,javascript,ajax,Javascript,Ajax,这是标记 竞争性考试 登录 版权所有,版权所有。作者:HACKSHAK&I-GOOGLEPLAY。 /这是ajax调用的javascript代码/ window.onload=function(){ var form=document.getElementById('login'); var output=document.getElementById('show'); form.onsubmit=函数(e){ e、 预防默认值(); var action=form.actio

这是标记


竞争性考试
    登录
版权所有,版权所有。作者:HACKSHAK&I-GOOGLEPLAY。

/这是ajax调用的javascript代码/

window.onload=function(){
var form=document.getElementById('login');
var output=document.getElementById('show');
form.onsubmit=函数(e){
e、 预防默认值();
var action=form.action;
var方法=form.method;
变量数据={};
var names=document.querySelectorAll(“#login[name]”);

对于(var i=0;i,从JS错误控制台:

未捕获的语法错误:意外标记

您在此处启动一个三元运算符,但从未完成它:

xhr.open(this.method,this.action?this.data,true);
因此,您分配给
onload
的函数永远不会得到正确的解析,因此它永远不会被分配,因此您永远不会分配提交事件

看起来您正试图构造一个查询字符串,但却完全弄错了

您需要在对象上循环,
encodeURIComponent
所有键和值,然后使用
=
&
字符(再次使用
+
)将它们连接到动作和字符串“?”


身份验证通常应该通过POST请求而不是GET请求来完成。

JS控制台是否会抱怨
xhr.open(this.method,this.action?this.data,true);
?控制台中没有显示任何内容,因此我无法调试。但我能够发现问题所在。我正在构造一个查询字符串(this.action?this.data)这不是向php发送数据,而是向php发送数据类型。嘿@Quentin你是对的。我没有添加正确的内容,所以我使用了…在循环中遍历数据对象。
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();
} 
xhr.open(this.method,this.action?this.data,true);