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

  • 本文关键字:ajax 成功 数据 函数 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"对象后使用它,但我在控制台中不断收到错误:

未捕获的类型错误:无法读取未定义的属性"phones"

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

这有可能吗?还是我的技术错了?

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

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 );
                       }

您应该执行

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 );
}