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);