繁体   English   中英

Java脚本数组未定义

[英]Java Script array get undefined

当我打印整个数组时它是print。但是如果我尝试逐个元素地打印它的打印结果是undefined。这是我的功能。 我在函数的末尾打印数组。客户端函数用于连接ajax API。我试图通过ajax函数从数据库中获取与特定字符串匹配的整数id,并将其推入两个数组中。

function fetch() {
var arrayForClass = [];//this is a array get undefined at the end
var arrayForMessage = [];//this is a array get undefined at the end
exceptionPattern ="";
receivedData.length = 0;
var queryInfo;
var queryForSearchCount = {
    tableName: "LOGANALYZER",
    searchParams: {
        query: "_eventTimeStamp: [" + from + " TO " + to + "]",
    }
};

client.searchCount(queryForSearchCount, function (d) {
    if (d["status"] === "success" && d["message"] > 0) {
        var totalRecordCount = d["message"];
        queryInfo = {
            tableName: "LOGANALYZER",
            searchParams: {
                query: "_eventTimeStamp: [" + from + " TO " + to + "]",
                start: 0, //starting index of the matching record set
                count: totalRecordCount //page size for pagination
            }
        };
        client.search(queryInfo, function (d) {
             var obj = JSON.parse(d["message"]);
             if (d["status"] === "success") {
                 for (var i = 0; i < obj.length; i++) {
                     if(obj[i].values._level === "ERROR" || obj[i].values._level === "WARN"){
                         receivedData.push([{
                             date: new Date(parseInt(obj[i].values._eventTimeStamp)).toUTCString(),
                             level: obj[i].values._level,
                             class: obj[i].values._class,
                             content: obj[i].values._content,
                             trace: (obj[i].values._trace ? obj[i].values._trace : ""),
                             timestamp: parseInt(obj[i].values._eventTimeStamp)
                         }]);
                     }else{
                         continue;
                     }
                 }
                 console.log(receivedData);
                 for (forLoopI = 0; forLoopI < receivedData.length; forLoopI++){
                     var className = receivedData[forLoopI][0].class;
                     var strclassname = className.toString();
                     var messageContent = receivedData[forLoopI][0].content;
                     queryInfo = {
                         tableName: "EXCEPTION_CLASS_FOR_ERROR_PATTERNS",
                         searchParams: {
                             query: "class_name: "+ strclassname + "",
                             start: 0, //starting index of the matching record set
                             count: 1 //page size for pagination
                         }
                     };
                     client.search(queryInfo,function(d){
                         var obj = JSON.parse(d["message"]);
                         if (d["status"] === "success") {
                             var num = obj[0].values.id;
                             var strnum = num.toString();
                             arrayForClass.push(strnum);
                         }else{
                                 $(canvasDiv).html(gadgetUtil.getCustemText("No content to display","error while creating the error pattern" +
                                 " please try again"));
                         }
                     },function(error){
                          console.log(error);
                          error.message = "Internal server error while data indexing.";
                          onError(error);
                     });
                     queryInfo = {
                          tableName: "ERROR_MESSAGE_CONTENTS",
                          searchParams: {
                              query: "message: \""+ messageContent + "\"",
                              start: 0, //starting index of the matching record set
                              count: 1 //page size for pagination
                          }
                     };
                     client.search(queryInfo,function(d){
                          var obj = JSON.parse(d["message"]);
                          console.log(obj);
                          if (d["status"] === "success") {
                                  var num2 = obj[0].values.id;
                                  var strnum2 = num2.toString();
                                  arrayForMessage.push(strnum2);
                          }else{
                                 $(canvasDiv).html(gadgetUtil.getCustemText("No content to display","error while creating the error pattern" +
                                 " please try again"));
                          }
                     },function(error){
                          console.log(error);
                          error.message = "Internal server error while data indexing.";
                          onError(error);
                     });
                 }
            }
         }, function (error) {
             console.log(error);
             error.message = "Internal server error while data indexing.";
             onError(error);
         });
    }else{
        $(canvasDiv).html(gadgetUtil.getCustemText("No content to display","there are no error patterns which include this error" +
        " please try another one"));
    }
}, function (error) {
    console.log(error);
    error.message = "Internal server error while data indexing.";
    onError(error);
});
 console.log("------------------");
 for (var j = 0; j < 8; j++) {
    console.log(arrayForClass[j]);//prints undefine
 }
 console.log("------------------");
 console.log(arrayForClass[0]); //prints undefine
 console.log(arrayForClass);//prints corectly
 console.log(arrayForMessage);//printd corectly

}

这是输出。

您的API调用是异步的,这意味着即使您的调用尚未完成,它也将继续工作到下一行。

undefined因为您的console.log对not的引用尚不存在。 arrayForClass为空,因此arrayForClass [0]不存在。

在下一行,您会获得正确的结果,因为您将console.log设置为现有变量,即使当前为空,但调试器工具正试图通过在输入数据时在控制台中为您更新它来使其变得聪明。

如果您真的想在那时查看实际值,则需要以某种方式使其不可变,例如:

console.log(JSON.parse(JSON.stringify(arrayForClass)));

这仅说明了为什么要在控制台中这样获取数据。如果需要使用这些变量,则必须在每个调用的回调函数中完成操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM