如何从容器函数中传递ajax成功数据

时间:2015-12-16 18:10:58

标签: ajax

有这个功能:

var mapdata={};
console.log( mapdata[0].phones );

function fetchSteeringRecs() 
{
    $.ajax({
        url      : "./php/ajxcontrol.php",
        type     : "POST",
        data     : { dorecs:1 },
        dataType : "json",
        async    : false,
        //success  : successHandler,
        success  : function(data) {
                      mapdata = data;
                      // console.log( data[0].phones );
                   }       
    });
}
/*
function successHandler(data, status ) {
    console.log( data[0].phones );
}
*/

我想在将其分配给'mapdata'对象后使用返回的数据 - 但我在控制台中一直收到错误:

  

未捕获的TypeError:无法读取未定义的属性“手机”

可以看出我已经尝试从回调successHandler函数中访问数据并且它工作正常 - 我也可以直接在ajax成功函数中访问返回的数据(两者都被注释掉) - 但我真的需要它在'全球对象'mapdata'

这是可能的还是我的技术在这里错了?

2 个答案:

答案 0 :(得分:0)

你应该做

success  : function(data) {
                  console.log( data );
               } 

找到输出数据结构。

修改

使用此

var mapdata;

function fetchSteeringRecs() 
{
    $.ajax({
        url      : "./php/ajxcontrol.php",
        type     : "POST",
        data     : { dorecs:1 },
        dataType : "json",
        async    : false,
        success  : function(data) {
                      mapdata = data;
                      successHandler();
                   }       
    });
}

function successHandler() {
    console.log( mapdata[0].phones );
}

答案 1 :(得分:0)

一种简单的方法是创建一个函数来处理返回的数据并在成功回调中调用该函数(应该使用promises),如下所示:

function doStuffWithMapData(mapdata){
     console.log(mapdata);
}

...
...

                   success  : function(data) {
                      mapdata = data;
                      doStuffWithMapData(mapdata);
                      // console.log( data[0].phones );
                   }    

同样,您可以使用全局变量:

var mapdata = {};  
function doStuffWithMapData(){
         console.log(mapdata);
    }

    ...
    ...

                       success  : function(data) {
                          mapdata = data;
                          doStuffWithMapData();
                          // console.log( data[0].phones );
                       }