2016-04-13 72 views
-1

HTML'yi bir <textarea> e-posta şablonu olarak kaydetmeye çalışıyorum. Bu, birden fazla yerde yapılabilir, bu yüzden parametreler alabilen ve gerektiğinde saklayabilen bir save_email_template() işlevini oluşturmak istiyorum (ki bu da başarılı bir şekilde yapıldı).AJAX çağrısından DATA parametresini kullanan bir işlev için geri arama tanımlayın

Ayrıca, her save_email_template() işlevi çağrıldığında bir geri arama belirtmek istiyorum. Yakalama geri arama içinde işlevinin içinde ajax çağrısından döndürülen data'u çeşitli yollarla işlemek istiyorum.

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); 
     } 
    }); 

SAYI::

Ben JS hata almaya devam ' "veri" tanımlanmadı' ve onun benim geri arama başvurarak ... Bu kod function(data){...}

İşte benim kodudur. Obviosly data henüz tanımlı değil, AJAX çağrısında döndürülen data'a nasıl başvurulur?

+2

Geri arama işlemini 'save_email_template()' işlevine iletmeyin. Bunun yerine, ajax çağrısını işlevden döndürün ve [jqXHR] (http://api.jquery.com/jQuery.ajax/#jqXHR) üzerinde bir '.done()' veya '.then()' işleyicisi yazın. Geri döndü. – dave

+1

@dave TBH, geri aramada yanlış bir şey yok ... DigitalMC: Soruyu açıkça anlamadım ve neden bu hatayı aldığımı anlamıyorum. Bu tam kod mu? –

+0

@dave Geri dönüşe erişmek için 'save_email_template()' işlevini bir değişkene koymak zorunda kalmaz mıyım? Bunu nasıl ayarlayacağım konusunda biraz kafam karıştı. – DigitalMC

cevap

1

Geri aramaları save_email_template() işlevinize iletmeyin. Bunun yerine, ajax çağrısını işlevden döndürün ve döndürülen jqXHR'a .done() veya .then() işleyicisini yazın. Bu, işlevi çağırmanıza ve geri arama mantığını kodun aynı alanında tanımlamanıza olanak tanır.

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 
});