2016-07-27 79 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