2016-07-27 78 views
0

我有一个函数可以从数据库中的某些东西创建一个对象。 Ajax处理数据请求,然后将其解析为JSON格式并提供给该函数。我做了一些检查(如果语句和什么不),然后将其返回到代码的另一个区域。使用值返回对象,但值未定义

然而在返回时,我可以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

请写一些代码,你在checkAlertFilled.php – eronax59

回答

0

我看到的是,$就仅仅是一个异步函数,而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); 
}, ...); 
+0

返回我读到它是一个重复的,可以看到你提供了一个类似的答案初始repsonse。但是,您能否在我提交的代码的背景下提供您的答案? –

+0

@DanW,已更新。我想你已经找到了答案。 – ZitRo