Javascript 我的Ajax类不起作用
我创建了一个JavaScript类,以简化Ajax请求 我的班级:Javascript 我的Ajax类不起作用,javascript,ajax,Javascript,Ajax,我创建了一个JavaScript类,以简化Ajax请求 我的班级: var ajax = { method:"GET", action:"", data : "", result: "", setResult : function(re){this.result = re;}, setMethod : function(method){this.method = method.toUpperCase();}, setAction : fu
var ajax =
{
method:"GET",
action:"",
data : "",
result: "",
setResult : function(re){this.result = re;},
setMethod : function(method){this.method = method.toUpperCase();},
setAction : function(page){this.action = page;},
addData : function(name,value){data_for_setting_data = name+"="+value+"&";this.data += data_for_setting_data;},
send : function()
{
var XMLHttpRequestObject = false;
if(window.XMLHttpRequest)
XMLHttpRequestObject = new XMLHttpRequest();
else if(window.ActiveXObject)
XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
else
{
try
{
XMLHttpRequestObject = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
return false;
}
}
if(XMLHttpRequestObject)
{
var resulter;
datalength = this.data.length;
datasender = this.data.substr(0,datalength-1);
switch(this.method)
{
case "GET" :
XMLHttpRequestObject.open("GET",this.action+"?"+datasender,true);
XMLHttpRequestObject.onreadystatechange = function()
{
if(XMLHttpRequestObject.readyState == 4)
{
this.result = XMLHttpRequestObject.responseText;
}
}
XMLHttpRequestObject.send(null);
;
break;
case "POST" :
XMLHttpRequestObject.open("POST",this.action,true);
XMLHttpRequestObject.setRequestHeader("Content-type","application/x-www-form-urlencoded");
XMLHttpRequestObject.send(datasender);
XMLHttpRequestObject.onreadystatechange = function()
{
if(XMLHttpRequestObject.readyState == 4)
{
this.result = XMLHttpRequestObject.responseText;
}
}
;break;
}
}
}
}
当我发送这样的数据时:
ajax.setAction("a.php");
ajax.setMethod("get");
ajax.addData("myname","mohsen");
ajax.send();
alert(ajax.result);
结果将一无所获
但例如,在第44行,如果我使用
alert(XMLHttpRequestObject.responseText)
而不是
this.result = XMLHttpRequestObject.responseText;
它将正常工作
我该怎么解决这个问题
还有一个问题:它会降低加载速度吗?问题在于
这个。结果,这个不涉及ajax
变量。要解决此问题,请更改为:
ajax.result = XMLHttpRequestObject.responseText;
或声明一个变量以保存当前上下文对象:
send : function()
{
var self = this;
然后像这样使用它:
self.result = XMLHttpRequestObject.responseText;
您的代码还有一个问题。因为ajax是asyn,当您调用alert(ajax.result)时代码>。来自服务器的响应可能尚未到达。要解决asyn问题,您可以通过将最终参数设置为false
来使用syn request(虽然不建议使用此方法,因为它会阻塞浏览器,但如果请求需要很长时间才能完成,则应用程序将显示为挂起)
或者传入一个回调函数。当ajax响应到达时,调用它:
send : function(callback){
....your code
if(XMLHttpRequestObject.readyState == 4)
{
if (typeof callback === "function"){
callback(XMLHttpRequestObject.responseText);
}
}
}
像这样使用它:
ajax.send(function(result){
alert(result);
});
有什么原因不能使用jQuery吗?是的。因为Ajax的目录对于客户端来说太重了,而仅仅用于Ajax并不是一个愚蠢的想法!当然,我的网站还有其他原因……在设置之前,您正试图访问ajax.result
。Ajax是不同步的。这就是为什么必须将回调分配给XMLHttpRequestObject.onreadystatechange
。了解同步代码和异步代码之间的区别,并处理Ajax调用的响应。你必须处理回拨。我的英语不好,你知道:((仍然不知道该怎么办。实际上,这个
指的是XMLHttpRequestObject
。但是,OP仍在尝试在设置之前访问该值。最好的方法是按您所说的那样回拨,这非常好:X@MohsenNemati:你很好。你不是一个好的选择。你掩盖了一个全局变量。
ajax.send(function(result){
alert(result);
});