通过ajax JSON得到未定义

Getting undefined via ajax JSON

本文关键字:未定义 JSON ajax 通过      更新时间:2023-09-26

当我使用chrome浏览器从控制台检查日志时,我一直得到sideType未定义。没有向sideType变量返回数据。

当我把console.log(sideType);sideGroupData()函数-它工作良好,没有问题。

代码:

function sideGroupData(GroupID) {
    $.getJSON("group_data.php",{GroupID:GroupID}, function(j){
          return j;
     });
}
function reloadProduct(productID) {
   $.post("product.php", { productID:productID }, function(data)  {   
                var sideType = sideGroupData(123);
                console.log(sideType);
     });
}
reloadProduct(999);

这是因为您在闭包中运行调用。ajax调用是异步进行的,这意味着即使您正在进行ajax调用,您的代码仍在继续移动:

function setVar () {
    var retVal = 1;
    $.ajax(..., function(data){
        retVal = data; //retVal does NOT equal data yet, it's still waiting
    });
    return retVal; //will return 1 every time because code doesn't wait for ajax
}
var someVar = setVar(); // will be 1

如果您希望返回该值,请包含一个回调函数,以便在返回数据时运行,并使用提供的数据运行它,如下所示:

function sideGroupData(GroupID, callback){
    $.getJSON('group_data.php', {GroupID: GroupID}, callback);
}
function reloadProduct(productID) {
   $.post("product.php", { productID:productID }, function(data)  {   
            sideGroupData(123, function(sideType){
                console.log(sideType);
        });    
    });
}

或者,在函数本身内部调用:

function reloadProduct(productID, groupId) {
   var prod, sideType;
   $.post("product.php", { productID:productID }, function(data)  {   
        prod = data;
        $.getJSON('group_data.php', {GroupID: groupId}, function(json){
            sideType = json;
            // you now have access to both 'prod' and 'sideType', do work here
        });
   });
}

sidegroupdata()函数调用将立即返回—它将触发ajax请求并继续执行。这意味着sideType被分配了一个空值,因为sideGroupData实际上并没有在ajax调用部分之后显式返回任何东西。

你在ajax请求中做ajax请求有什么原因吗?修改product.php页面以返回包含该产品ID和单个响应中包含的"sidegroupdata"的数据结构不是更有意义吗?