从ajax成功调用运行javascript函数

时间:2016-09-14 19:48:12

标签: javascript jquery ajax

我目前正在使用谷歌地图,我想在数据库中保存一些位置并通过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);
            }
        });
    }
};
关于Kevin B发表的评论,完成部分应该在异步调用完成后运行吗? 上次修改:

function getLocation() {
    return $.ajax({
        type: 'get',
        url: '../../php/functions/getLocations.function.php',
        dataType: 'json'
    });
}

getLocation().done(function(result) {
    console.log(result);
    return result;
});

2 个答案:

答案 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