我目前正在使用谷歌地图,我想在数据库中保存一些位置并通过ajax调用检索它们,之后我从这些位置创建JavaScript对象。
至于代码,我不确定为什么这不起作用,有人可以为我清除这个吗?
Chrome控制台: 未捕获的TypeError:this.processData不是函数
var Locations = {
count: 0,
location: [],
processData: function (data) {
console.log(data);
},
getData: function () {
'use strict';
jQuery.ajax({
type: 'get',
url: '../../php/functions/getLocations.function.php',
dataType: 'json',
success: function (data) {
this.processData(data);
}
});
}
};
function getLocation() {
return $.ajax({
type: 'get',
url: '../../php/functions/getLocations.function.php',
dataType: 'json'
});
}
getLocation().done(function(result) {
console.log(result);
return result;
});
答案 0 :(得分:2)
关键字this
是指初始化的范围。
所以在你的情况下,它是success
- 函数的范围。它不是指对象本身。
要使其工作,您必须缓存对象的引用以在success
- 函数中使用它或引用对象本身。
对象参考:
jQuery.ajax({
type: 'get',
url: '/echo/json/',
dataType: 'json',
success: function(data) {
Locations.processData(data);
}
});
缓存this
getData: function() {
'use strict';
let _this = this;
jQuery.ajax({
type: 'get',
url: '/echo/json/',
dataType: 'json',
success: function(data) {
_this.processData(data);
}
});
}
<强> Fiddle 强>
答案 1 :(得分:0)
this
指向ajax设置对象。使用$ .proxy或将this
存储在变量中后使用context
,以便定位正确的getData: function () {
'use strict';
var thisLocation = this;
jQuery.ajax({
type: 'get',
url: '../../php/functions/getLocations.function.php',
dataType: 'json',
success: function (data) {
thisLocation.processData(data);
self