Javascript 具有此关键字的函数调用未定义
我通过Javascript 具有此关键字的函数调用未定义,javascript,jquery,Javascript,Jquery,我通过这个指针调用本地(类)函数,但是得到了一个错误“uncaughttypeerror:undefined不是函数”。在线发生的问题 this.createTimeline()在装载时间表功能 我的JS(相关)是: this.createTimeline=函数(){ this.inside_timeline=[]; 对于(var d=新日期(在周内开始);d存储$(this)在post函数调用之外的引用,在done回调函数中使用它,这里this不引用您的对象 this.loadtimetabl
这个
指针调用本地(类)函数,但是得到了一个错误“uncaughttypeerror:undefined不是函数”
。在线发生的问题
this.createTimeline()代码>在<代码>装载时间表
功能
我的JS(相关)是:
this.createTimeline=函数(){
this.inside_timeline=[];
对于(var d=新日期(在周内开始);d存储$(this)
在post函数调用之外的引用,在done
回调函数中使用它,这里this
不引用您的对象
this.loadtimetable = function(in_guide_id, in_week_start, in_week_end)
{
var self = this; //store reference of this
$.post( "./j.php", {})
.done(function( data ) {
self.createtimetable(); //Here instead of this use your variable
});
}
编辑
如果您愿意使用$.ajax()
而不是$.post()
,则可以使用该选项
此对象将成为所有Ajax相关回调的上下文。默认情况下,上下文是一个表示调用中使用的Ajax设置的对象($.ajaxSettings
与传递给$.Ajax
的设置合并)。(…)
将$(this)
的引用存储在post函数调用之外,并在done
回调函数中使用它,此处this
不引用您的对象
this.loadtimetable = function(in_guide_id, in_week_start, in_week_end)
{
var self = this; //store reference of this
$.post( "./j.php", {})
.done(function( data ) {
self.createtimetable(); //Here instead of this use your variable
});
}
编辑
如果您愿意使用$.ajax()
而不是$.post()
,则可以使用该选项
此对象将成为所有Ajax相关回调的上下文。默认情况下,上下文是一个表示调用中使用的Ajax设置的对象($.ajaxSettings
与传递给$.Ajax
的设置合并)。(…)
您的代码在回调中执行,this
不再指向您的对象。您应该使用闭包,将this
别名为类似于self
的内容,或者显式绑定它
this.createtimetable = function () {
this.inside_timetable = [];
for (var d = new Date(in_week_start); d <= new Date(in_week_end); d.setDate(d.getDate() + 1)) {
console.log(new Date(d));
daysOfYear.push(new Date(d));
}
}
this.loadtimetable = function (in_guide_id, in_week_start, in_week_end) {
this.guide_id = in_guide_id;
this.week_start = in_week_start;
this.week_end = in_week_end;
$.post("./j.php", {
guide_id: in_guide_id,
week_start: in_week_start,
week_end: in_week_end
})
.done(function (data) {
var res_arr = jQuery.parseJSON(data);
if (res_arr.code == 0) {
this.excursions_base = res_arr.answer;
alertify.success("Data extracted");
this.createtimetable();
} else {
alertify.error("Some problem occured." + data);
}
}.bind(this)).fail(function () {
alertify.alert("Error. Please, refresh page, or try later. We are sorry. Write or call us with your question!");
}.bind(this));
}
this.createTimeline=函数(){
this.inside_timeline=[];
对于(var d=新日期(在周内开始);d您的代码在回调中执行,并且此
不再指向您的对象。您应该使用闭包,将此
别名为类似于self
的内容,或者显式绑定此
this.createtimetable = function () {
this.inside_timetable = [];
for (var d = new Date(in_week_start); d <= new Date(in_week_end); d.setDate(d.getDate() + 1)) {
console.log(new Date(d));
daysOfYear.push(new Date(d));
}
}
this.loadtimetable = function (in_guide_id, in_week_start, in_week_end) {
this.guide_id = in_guide_id;
this.week_start = in_week_start;
this.week_end = in_week_end;
$.post("./j.php", {
guide_id: in_guide_id,
week_start: in_week_start,
week_end: in_week_end
})
.done(function (data) {
var res_arr = jQuery.parseJSON(data);
if (res_arr.code == 0) {
this.excursions_base = res_arr.answer;
alertify.success("Data extracted");
this.createtimetable();
} else {
alertify.error("Some problem occured." + data);
}
}.bind(this)).fail(function () {
alertify.alert("Error. Please, refresh page, or try later. We are sorry. Write or call us with your question!");
}.bind(this));
}
this.createTimeline=函数(){
this.inside_timeline=[];
对于(var d=新日期(在周内开始);d此
指向上下文,因此请注意调用函数的人和方式此
指向上下文,因此请注意调用函数的人和方式