2016-09-14 112 views
-1

我目前正在使用谷歌地图,我想保存一些位置在数据库中,并通过ajax调用检索它们,之后我从位置创建JavaScript对象。从ajax成功调用运行javascript函数

至于代码我不确定为什么这不起作用,有人可以为我清除这个吗?

Chrome的控制台: 遗漏的类型错误: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

我编辑这个职位有一个新的问题.. – Smoothal

+0

,它仍然是一个欺骗,但另一个问题:你不能从异步函数返回。那是不可能的。 –

+0

由于您的修改使现有答案无效,因此我将问题推回原位。如果你有新的问题,你应该把它作为一个新的问题。然而,你要问的是一个非常受欢迎的笨蛋;你应该先搜索。 http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call –

回答

1

关键字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

+0

答案几乎就在那里....提供一个例子。 – Adam

+0

亚当是对的,但我明白了。我会尝试去适应它 – Smoothal

+0

@平滑添加了2个具体的例子。我个人会和第二个一起去的。 – empiric

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); 
+0

@KevinB - 回答者没有提供代码示例,但只是提到了这个事实,即当我发表评论 – Adam

+0

时这个错误是为什么没用?这是正确的。 –

+0

答案目标已经存在。重复的答案 - >没有用。 –