在Ajax.use
中,在回调函数中,这指的是回调函数。
但是,在回调定义this
之外会引用Ajax的特定实例。
这就是我在this
中使用Ajax.invoke
的方式 - > this.use()
从另一个成员方法调用成员方法。
我还需要在回调函数中调用成员方法。
我猜到并放入
this.invoke()
但我不认为这是指正确的对象,因为它在回调函数中。我认为它指的是回调函数对象。
/**
* Ajax
*/
var Ajax = ( function ()
{
var Ajax = function (element)
{
this.object = this.create();
};
Ajax.prototype.create = function()
{
var request;
try
{
request = new window.XMLHttpRequest();
}
catch( error )
{
try
{
request = new window.ActiveXObject( "Msxml2.XMLHTTP" );
}
catch( error )
{
try
{
request = new window.ActiveXObject( "Microsoft.XMLHTTP" );
}
catch( error )
{
request = false;
}
}
}
// alert("Object Created Successfully");
return request;
};
Ajax.prototype.use = function( param, ajax_func )
{
alert("Ajax.prototype.use Called");
this.object.open( "POST", Global.GATEWAY, true );
this.object.setRequestHeader( "Content-type", "application/x-www-form-urlencoded" );
this.object.setRequestHeader( "Content-length", param.length );
this.object.setRequestHeader( "Connection", "close" );
this.object.onreadystatechange = function()
{
if( this.readyState === 4 )
{
if( this.status === 200 )
{
ajax_func( this.responseText );
return true;
}
else
{
this.invoke( param, ajax_func );
return false;
}
}
};
this.object.send( param );
return true;
};
Ajax.prototype.invoke = function( param, ajax_func )
{
var state = false,
count = 1;
while( state === false && count <= 5 )
{
if( count !== 1 )
{
alert( 'Ajax Object Use Failed | Try Again ');
}
state = this.use( param, ajax_func );
count++;
}
return state;
};
return Ajax;
} () );
答案 0 :(得分:2)
你的回调this
内部不再是对Ajax对象的引用,这是完全正确的。您需要创建一个可以在回调中使用的引用:
Ajax.prototype.use = function( param, ajax_func )
{
alert("Ajax.prototype.use Called");
var self = this;
this.object.open( "POST", Global.GATEWAY, true );
this.object.setRequestHeader( "Content-type", "application/x-www-form-urlencoded" );
this.object.setRequestHeader( "Content-length", param.length );
this.object.setRequestHeader( "Connection", "close" );
this.object.onreadystatechange = function()
{
if( this.readyState === 4 )
{
if( this.status === 200 )
{
ajax_func( this.responseText );
return true;
}
else
{
self.invoke( param, ajax_func );
return false;
}
}
};
this.object.send( param );
return true;
};
请注意,我在回调中定义var self = this;
并使用self
而不是this
。