在向服务器发送Ajax请求,然后在JavaScript对象中返回success函数的数据时,我有点烦人的问题。我搜索过类似的问题,但没有一个像我的一样。
例如,我有以下代码在对象中发送请求:
function SomeObject ( someVar )
{
var someVar = someVar;
}
SomeObject.prototype.sendRequest = function ()
{
$.ajax(
{
url : "somePage.php",
type : "POST",
data :
{
someVar : someVar
},
success : this.parseSuccess
} );
};
SomeObject.prototype.parseSuccess = function ( data )
{
if ( data === "success" )
{
this.proceed(); // Error
}
else
{
alert( "Server failed request." );
this.proceed();
}
};
SomeObject.prototype.proceed = function ()
{
// Do something else
};
我知道this.proceed()
会失败,因为this
不是SomeObject
个实例。
但是,如何在请求完成后有效地返回对象? 我发现我可以执行以下操作来实现我想要的功能,但感觉不合适,我希望有更好的方法来处理Ajax调用:
SomeObject.prototype.sendRequest = function ()
{
var me = this;
$.ajax(
{
url : "somePage.php",
type : "POST",
data :
{
someVar : someVar
},
success : function ( data )
{
me.parseSuccess( data ); // Will work
}
} );
};
感谢您对此事的任何帮助。
答案 0 :(得分:4)
您可以随时执行此操作:
success : function ( data )
{
parseSuccess.apply(this, [data]); // or parseSuccess.call(this, data);
}
基本上,使用apply()
,您可以传入要在函数内使用的this
的上下文,在本例中是SomeObject
上下文。
答案 1 :(得分:1)
您可以使用context
的{{1}}选项。具体来说,使用$.ajax
会将context: this
内的this
值设置为当前parseSuccess
值,这就是您想要的。
this