经过长时间的研究,我尝试通过回调来处理一些AJAX数据。我是一个意大利用户,所以如果我的解释不够清楚,我很抱歉(实际上,我很难用英语解释我的问题)。
我正在尝试通过回调传递一些数据。我的jQuery.ajax.async没有设置为false,因为我需要在异步模式下工作。因此,根据我在这里找到的一些帖子,我正在尝试将一个回调传递给我的函数。但是如果我尝试通过alert函数显示这个数据,我可以看到它是未定义的。代码如下:
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代码示例。
[
{
"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"
}
]发布于 2012-11-19 03:10:42
这行不通的。
您将数据类型设置为json,这意味着您希望返回一个JSON结果,否则任何其他操作都将失败。
然后根据返回的for对象长度使用JSON循环迭代,因为对象没有长度,所以for循环永远不会运行。
您要么期望数组具有长度属性,但由于数据类型被设置为JSON,它们不会出现;要么期望对象作为JSON对象出现,这些对象没有长度属性,并且必须使用for(key in object)或$.each(object, function(key, value) {...})等循环。
发布于 2012-11-19 02:46:16
您确定您的HTTP请求实际上是在返回某些内容吗?您可以给出请求的完整URL,也可以给函数提供不同的参数。
https://stackoverflow.com/questions/13443233
复制相似问题