首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >回调函数未获取数据

回调函数未获取数据
EN

Stack Overflow用户
提问于 2012-11-19 02:34:10
回答 2查看 133关注 0票数 0

经过长时间的研究,我尝试通过回调来处理一些AJAX数据。我是一个意大利用户,所以如果我的解释不够清楚,我很抱歉(实际上,我很难用英语解释我的问题)。

我正在尝试通过回调传递一些数据。我的jQuery.ajax.async没有设置为false,因为我需要在异步模式下工作。因此,根据我在这里找到的一些帖子,我正在尝试将一个回调传递给我的函数。但是如果我尝试通过alert函数显示这个数据,我可以看到它是未定义的。代码如下:

代码语言:javascript
复制
function loadentities(id, username, password, system, host)
{
    var postData = "username=" + encodeURI(username) +
        "&password=" + encodeURI(password) +
        "&system=" + encodeURI(system) +
        "&host=" + encodeURI(host);

    jQuery.ajax({

        type: "POST",
        dataType: "json",
        data: postData,
        beforeSend: function(x) 
        {       
            if(x && x.overrideMimeType) 
            {   
                x.overrideMimeType("application/json;charset=UTF-8");
            }
        },
        url: 'operations.php?op=loadentities',
        error: function(x, textStatus, errorThrown)
        {
            alert("Request failed: " + textStatus + " " + errorThrown);
        },
        success: function(data) 
        {
            var html = "";
            for(var i=0; i < data.length; i++)
            {
                html += "<li><a onclick=\"showhide('" + data[i].entity + "');\">" + data[i].entity + "</a><ul id=\"" + data[i].entity + "\" class=\"list\"></ul></li>"; 
                loadlastfiveevents(username, password, system, host, data[i].entity, function(data)
                            {
                                 alert(data);
                                 entityData = new Array(); 
                                 for(var i = 0; i < data.length; i++)
                                 {
                                     var entityDataEntry = new Object();
                                     entityDataEntry.key = data[i].key;
                                     entityDataEntry.event = data[i].event;
                                     entityDataEntry.timestamp = data[i].timestamp;
                                     entityData.push(entityDataEntry);
                                 }
                                 alert(data[0].key);                                                      
                             });
                entitiesValues[entitiesIndex++] = data[i].entity;
            }

            jQuery(html).appendTo('#hlentity' + id);
        }
    }); //end jQuery.ajax
}

function loadlastfiveevents(username, password, system, host, entity, buildlastfiveevents)
{
    var postData = "username=" + encodeURI(username) +
        "&password=" + encodeURI(password) +
        "&system=" + encodeURI(system) +
        "&host=" + encodeURI(host) +
        "&entity=" + encodeURI(entity);

    jQuery.ajax({

        type: "POST",
        dataType: "json",
        data: postData,
        beforeSend: function(x) 
        {       
            if(x && x.overrideMimeType) 
            {   
                x.overrideMimeType("application/json;charset=UTF-8");
            }
        },
        url: 'operations.php?op=getlatestevents',
        error: function(x, textStatus, errorThrown)
        {
            alert("Request failed: " + textStatus + " " + errorThrown);
        },
        success: function(data) 
        {
            var color = "green";
            var html = "";
            for(var i = 0; i < data.length; i++)
            {
                if(data[i].event == "SUP") color = "green";
                else if(data[i].event == "IER") color = "yellow";
                else if(data[i].event == "SDW") color = "black";
                else color = "red";
                html += "<li><img src=\"images/" + color + ".jpg\" />" + data[i].key + " " + data[i].event + " " + data[i].timestamp + "</li>"; 
            }
            jQuery(html).appendTo('#' + entity);
            propagate(entity, data[0].event);
            buildlastfiveelements(data);
        }
    }); //end jQuery
}

我希望这篇文章足够清晰,感谢您的耐心和时间。

编辑:下面是getlatestevents (在loadlastfiveevents中)返回的JSON代码示例。

代码语言:javascript
复制
[
    {
        "key": "error",
        "event": "SUP",
        "timestamp": "2012-11-16 11:13:36"
    },
    {
        "key": "error",
        "event": "SDW",
        "timestamp": "2012-11-16 11:12:57"
    },
    {
        "key": "error",
        "event": "SUP",
        "timestamp": "2012-11-16 11:11:32"
    },
    {
        "key": "error",
        "event": "SDW",
        "timestamp": "2012-11-15 19:40:31"
    },
    {
        "key": "timeout",
        "event": "SER",
        "timestamp": "2012-11-15 19:30:54"
    }
]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-19 03:10:42

这行不通的。

您将数据类型设置为json,这意味着您希望返回一个JSON结果,否则任何其他操作都将失败。

然后根据返回的for对象长度使用JSON循环迭代,因为对象没有长度,所以for循环永远不会运行。

您要么期望数组具有长度属性,但由于数据类型被设置为JSON,它们不会出现;要么期望对象作为JSON对象出现,这些对象没有长度属性,并且必须使用for(key in object)$.each(object, function(key, value) {...})等循环。

票数 2
EN

Stack Overflow用户

发布于 2012-11-19 02:46:16

您确定您的HTTP请求实际上是在返回某些内容吗?您可以给出请求的完整URL,也可以给函数提供不同的参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13443233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档