我有一个函数可以从数据库中的某些东西创建一个对象。 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"
答案 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);
}, ...);