2016-04-13 2 views
-1

Ich versuche, den HTML-Code aus einer <textarea> als E-Mail-Vorlage zu speichern. Dies kann an mehreren Stellen geschehen, so dass ich eine save_email_template() Funktion erstellen möchte, die Parameter empfangen und nach Bedarf speichern kann (was ich erfolgreich getan habe).Definieren Sie einen Rückruf für eine Funktion, die DATA-Parameter aus AJAX-Aufruf verwendet

Ich möchte auch einen Rückruf jedes Mal, wenn die save_email_template() Funktion aufgerufen wird. Der Catch ist innerhalb des Callback Ich möchte die data von einem Ajax-Aufruf innerhalb der save_email_template() Funktion auf eine Vielzahl von Möglichkeiten behandelt behandeln.

Hier ist mein Code:

function save_email_template(options,callback){ 

    $.ajax({ 
     type: "POST", 
     url: '/save_email_template.php', 
     data: options.params, 
     success:function(data) { 

     if (typeof callback === 'function') { 
      callback(data); 
     } 
     } 
    }); 
} 


    save_email_template({ 
     params: { 
     'action':'add', 
     'eid':$('input#id').val(), 
     'title':$('input#name').val(), 
     'html':$('textarea#html').val() 
     } 
    }, function(data){ // <---- "Data" Not Defined 

     if (typeof data.html_issues !== 'undefined') { 
      console.log('HTML Issues:\n------------------'); 
      console.error(data.html_issues); 
     } 

     if (typeof data.css_issues !== 'undefined') { 
      console.log('CSS Issues:\n------------------'); 
      console.error(data.css_issues); 
     } 

     if (data.status == "OK") { 
      $('body').append(data.html); 
     } else { 
      if (typeof data.error_msg !== 'undefined') 
       alert(data.error_msg); 

      if (data.status == "ERROR") 
       console.error(data); 
     } 
    }); 

DAS PROBLEM:

Ich halte immer die JS-Fehler ' "Daten" nicht definiert' und seine meinem Rückruf Referenzierung ... dieser Code function(data){...}. Obviosly data ist noch nicht definiert, aber wie kann ich die data im AJAX-Aufruf zurückgegeben verweisen?

+2

Übergeben Sie den Rückruf nicht in Ihre Funktion 'save_email_template()'. Übergeben Sie stattdessen den Ajax-Aufruf von der Funktion, und schreiben Sie einen '.done()' - oder '.then()' -Handler für den [jqXHR] (http://api.jquery.com/jQuery.ajax/#jqXHR) ist zurück gekommen. – dave

+1

@dave TBH, es ist nichts falsch mit einem Rückruf ... DigitalMC: Ich verstehe die Frage nicht klar und ich verstehe nicht, warum Sie diesen Fehler bekommen. Ist das der vollständige Code? –

+0

@dave würde ich nicht die Funktion 'save_email_template()' in eine Variable setzen müssen, um auf die Rückgabe zuzugreifen? Ich bin ein wenig verwirrt darüber, wie ich das einrichten soll. – DigitalMC

Antwort

1

Übergeben Sie den Rückruf nicht an Ihre save_email_template()-Funktion. Übergeben Sie stattdessen den Ajax-Aufruf von der Funktion, und schreiben Sie einen .done() oder -Handler auf dem jqXHR, der zurückgegeben wird. Dadurch können Sie die Funktion aufrufen und die Callback-Logik im selben Codebereich definieren.

function save_email_template(options){ 
    return $.ajax({ 
     type: "POST", 
     url: '/save_email_template.php', 
     data: options.params 
    }); 
} 

save_email_template(options).then(function(data) { 
    //write your callback logic here 
}); 
Verwandte Themen