因此,我创建了一个创建新xmlhttprequest的函数,并获取一个对象,该对象包含构造一个参数所需的所有信息。一切正常,直到我告诉它通过对象完成请求时该做什么(函数的默认值工作正常。)由于某种原因它给了我一个错误"未捕获的ReferenceError:x未定义&#34 ;
window._={
xhr: function(a){
if(typeof a.method==="undefined"||a.adress==="undefined"){
console.log("Well, That's not going to work...");
}
var x=new XMLHttpRequest();
x.open(a.method,a.adress,a.asyn);
if(typeof a.headers!== "undefined"){
Object.keys(a.headers).forEach(function (key) {
x.setRequestHeader(key,a.headers[key]);
});
}
if(typeof a.ready==="undefined"){
a.ready=function(){console.log(x.responseText);}
}
x.send();
x.onreadystatechange = function(){
if(x.readyState==4&&x.status==200){
a.ready();
}
}
}
}
window.onload = alert(_.xhr({method:"get",adress:"../php/include/functions.php?function=id_from_username&arg=kiddo",asyn:true,headers:{},ready:function(){console.log(x.responseText);}}));
(指定的url是我的服务器上的一个php文件,它可以在给定GET头?function=samplefunc&arg1=foo&arg2=bar
时执行文件中的函数,也可以根据函数的需要执行多个args。在这种情况下,我告诉它查找名为" kiddo"的用户,并将他们的ID返回给我的脚本。)
答案 0 :(得分:1)
问题是你正在访问xhr函数中定义的变量x,它来自于它的范围之外。
解决方案是使用xhr函数内部的响应文本调用ready函数
window._={
xhr: function(a){
if(typeof a.method==="undefined"||a.adress==="undefined"){
console.log("Well, That's not going to work...");
}
var x=new XMLHttpRequest();
x.open(a.method,a.adress,a.asyn);
if(typeof a.headers!== "undefined"){
Object.keys(a.headers).forEach(function (key) {
x.setRequestHeader(key,a.headers[key]);
});
}
if(typeof a.ready==="undefined"){
a.ready=function(){console.log(x.responseText);}
}
x.send();
x.onreadystatechange = function(){
if(x.readyState==4&&x.status==200){
a.ready(x.responseText);
}
}
}
}
window.onload = alert(_.xhr({method:"get",adress:"",asyn:true,headers:{},ready:function(responsText){console.log(responsText);}}));