返回带有值的对象,但值未定义

时间:2016-07-27 10:01:16

标签: javascript jquery json

我有一个函数可以从数据库中的某些东西创建一个对象。 Ajax处理数据请求,然后将其解析为JSON格式并输入到函数中。我做了一些检查(if语句和什么不是),然后将它返回到代码的另一个区域。

但是在退回时我可以console.log()查看它是Object { }

我单击该对象并获取对话框中显示的变量(并显示它们具有附加到每个属性的值)但是在尝试执行时

result = alertFilled(type,mon,year,data.tableField);

console.log(result.table);

我未定义

我处理和创建对象的功能是

function alertFilled (type,mon,year,tableField){
    var alertObj = {};

    $.ajax({
        method: 'POST',
        url: 'ajaxScripts/checkAlertFilled.php',
        data: {
            'type': type,
            'mon': mon,
            'year': year,
            'id': tableField,
            'ajax': true

        },
        // return appropriate message
        success: function (data)
        {
            var parsed = JSON.parse(data);

            alertObj.table = type;
            alertObj.tableField = tableField;
            alertObj.monthYear = parsed.mthYr;
            alertObj.month = "";
            alertObj.year = "";
            alertObj.echoFilled = false;
            alertObj.bravoFilled = false;

            var index = [];


            for (var x in parsed) {
                index.push(x);
            }

            alertObj.month = parsed[index[2]];
            alertObj.year = parsed[index[3]];

            var mthYrLower = parsed[index[0]].toString();
            if (mthYrLower.toLowerCase().indexOf("echo") >= 0){

                if ($.trim(parsed[index[1]]) !== "")
                {
                    alertObj.echoFilled = true;
                }
                else {
                    alertObj.echoFilled = false;
                }
            }
            if (mthYrLower.toLowerCase().indexOf("bravo") >= 0){

                if ($.trim(parsed[index[1]]) !== "")
                {
                    alertObj.bravoFilled = true;

                }
                else {
                    alertObj.bravoFilled = false;
                }
            }
            counter++;
        }
    });

    return alertObj;

}

checkAlertFilled.php返回

type = "Table1" or "Table2"
tableField = "Column1" or "Column2" or "Column3"
monthYear = "JUL2016 ECHO" as an example
month = "JUL"
year = "2016"

和其他变量

echoFilled = "true" or "false"
bravoFilled = "true" or "false"

1 个答案:

答案 0 :(得分:0)

我看到$ .ajax只是一个异步函数,而return alertObj;是一个同步return语句。立即返回空alertObj而不填充新属性。您必须重新设计要使用的代码,例如回调函数。例如:

function alertFilled (callback, type, ...) {
    var alertObj = {};
    $.ajax({ ..., success: function (data) {
        // do all your stuff here
        callback(alertObj);
    }});
}

用法:

alertFilled(function (data) {
    console.log(data);
}, ...);