我有一个名为Company的javascript对象,可以多次实例化。
我希望每个公司都能处理自己与服务器的通信,以便它的ajax调用将包含在类中。
到目前为止,我有:
Company = new Object();
Company.SendData = function(){
$.ajax({
type: "POST",
url: "<some url>",
data: <some data>,
dataType: "json",
success: this.ReceiveData,
error: ErrorFunc
});
}
Company.ReceiveData = function(data){
alert("Received some data");
}
Ajax工作正常,服务器正确接收数据并返回响应,但回调函数不会触发。
我的猜测是因为它不再具有任何参考框架#34;这个&#34;是
有没有办法让函数附加到类的单个实例?
答案 0 :(得分:1)
试试这个:
Company.SendData = function(){
var self = this;
$.ajax({
type: "POST",
url: "<some url>",
data: <some data>,
dataType: "json",
success: function(res) {self.ReceiveData(res);},
error: ErrorFunc
});
}
This SO帖子可能有助于理解。
<强>更新强>
通过封装函数来修复示例。
答案 1 :(得分:1)
如何解决此问题有几种不同的选择。问题的关键在于,在调用回调时,您需要正确设置this
的值,因为默认情况下它不会正确。
在现代浏览器中,您可以使用广泛有用的.bind()
:
Company = new Object();
Company.SendData = function(){
$.ajax({
type: "POST",
url: "<some url>",
data: <some data>,
dataType: "json",
success: this.ReceiveData.bind(this),
error: ErrorFunc
});
}
Company.ReceiveData = function(data){
alert("Received some data");
}
或者,您可以使用context
$.ajax()
选项指示jQuery为您完成工作:
Company = new Object();
Company.SendData = function(){
$.ajax({
type: "POST",
url: "<some url>",
data: <some data>,
dataType: "json",
context: this,
success: this.ReceiveData,
error: ErrorFunc
});
}
Company.ReceiveData = function(data){
alert("Received some data");
}
或者您可以使用保存的this
值创建自己的存根函数(这是我最不喜欢的选项):
Company = new Object();
Company.SendData = function(){
var self = this;
$.ajax({
type: "POST",
url: "<some url>",
data: <some data>,
dataType: "json",
success: function(result) {return self.ReceiveData(result);},
error: ErrorFunc
});
}
Company.ReceiveData = function(data){
alert("Received some data");
}