2016-07-27 8 views
0

Ich habe eine Funktion, die ein Objekt aus einigen Sachen in einer Datenbank erstellt. Ajax behandelt die Anfrage nach Daten, die dann im JSON-Format analysiert und in die Funktion eingespeist werden. Ich überprüfe etwas (if-Anweisungen und was nicht) und gebe es dann an einen anderen Bereich des Codes zurück.Rückgabe eines Objekts mit Werten, aber Werte sind nicht definiert

Allerdings, wenn es die Rückkehr kann ich es console.log() und sehe, dass es sich um ein Object { }

ich das Objekt klicken und die Variablen im Dialogfeld angezeigt bekommen (und es zeigt, dass sie haben Werte für jede Eigenschaft angefügt), aber wenn zu tun versuchen, ein

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

console.log(result.table); 

I undefined

Meine Funktion, das Objekt zu behandeln erhalten und zu schaffen

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 Kosten

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

und anderen Variablen

echoFilled = "true" or "false" 
bravoFilled = "true" or "false" 
+0

Bitte schreiben Sie einen Code, was Sie in checkAlertFilled.php Rückkehr – eronax59

Antwort

0

Was ich sehe, ist, dass .ajax $ ist einfach eine asynchrone Funktion, während return alertObj; eine synchrone return-Anweisung . Ein leeres alertObj wird sofort zurückgegeben, ohne mit neuen Eigenschaften gefüllt zu werden. Sie müssen Ihren Code neu entwerfen, um beispielsweise die Rückruffunktion zu verwenden. Beispiel:

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

Und Nutzung:

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

las ich die anfängliche repsonse darüber ein Duplikat zu sein und sehen Sie eine ähnliche Antwort zur Verfügung gestellt haben. Könnten Sie Ihre Antwort jedoch im Zusammenhang mit dem von mir eingereichten Code angeben? –

+0

@DanW, aktualisiert. Ich denke du hast schon eine Antwort gefunden. – ZitRo

Verwandte Themen