不幸的是,除了jQuery结果外,我什么都没有。我正在寻找正确的方法通过Ajax传递参数,旧的浏览器后备不是必需的,但请不要库。如果我错过了另一个线程,请链接=)
我正在使用$,但它是一个自定义对象/无论如何,而不是jQuery。
$.ajax({
't':'POST',
'u':e,
'd':{ajax:'1'},
's':function(data){
console.log(data.response);
document.getElementById('mainc').innerHTML = data.response;
},
'e':function(data){
console.log(data);
}
});
哪个致电:
$.ajax = function(a){
if(!a.u){return false;};
a.t=a.t||"GET";
typeof a.a=='undefined'?true:a.a;
a.e=a.e||function(){return false;};
a.s=a.s||function(){return true;};
var x=new XMLHttpRequest();
x.open(a.t,a.u,a.a);
x.onreadystatechange=function(){
if(x.readyState===4){
if(x.status===200){
a.s(x);
}else{
a.e(x);
}
}
};
a.t==="post" ? x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") : null;
x.send(a.d);
}
x.send(a.d)
应通过{ajax:'1'}
。我也尝试了{'ajax':'1'}
,也尝试了'ajax=1'
。不确定为什么我尝试传递的任何参数都不会使它成为服务器端。我非常确定参数不会击中服务器,尽管该请求似乎没有问题而发送和接收。
XMLHttpRequest.send()
如果设置x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
。
您应该格式为urlencoded变量,如下所述:
javaScript对象的查询弦编码
或像建议的另一个答案一样使用x.setRequestHeader("Content-Type", "application/json")
。
也:
a.t==="post"
应该是 a.t==="POST"
,因为它不会因病例敏感的检查而更改请求标头。
完整的工作代码(带有URLENCODED数据):
$ = {}
$.ajax = function(a){
if(!a.u){return false;};
a.t=a.t||"GET";
typeof a.a=='undefined'?true:a.a;
a.e=a.e||function(){return false;};
a.s=a.s||function(){return true;};
var x=new XMLHttpRequest();
x.open(a.t,a.u,a.a);
x.onreadystatechange=function(){
if(x.readyState===4){
if(x.status===200){
a.s(x);
}else{
a.e(x);
}
}
};
a.t==="POST" ? x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") : null;
x.send(a.d);
}
$.ajax({
't':'POST',
'u':'/',
'd':"ajax=1",
's':function(data){
console.log(data.response);
document.getElementById('mainc').innerHTML = data.response;
},
'e':function(data){
console.log(data);
}
});
尝试将请求标头设置为
x.setRequestHeader("Content-Type", "application/json")
检查一下。