2016-04-13 8 views
-1

<textarea>から電子メールテンプレートとしてHTMLを保存しようとしています。これは複数の場所で行うことができるので、パラメータを受け取り、必要に応じて保存できるsave_email_template()関数を作成したい(これはsucessfulylが行った)。AJAXコールのDATAパラメータをutliziesする関数のコールバックを定義します

また、save_email_template()関数が呼び出されるたびにコールバックを指定する必要があります。 catchはコールバック内にありますsave_email_template()関数内のajax呼び出しから返されたdataをさまざまな方法で処理したいと思います。

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

ISSUE:

私はJSエラーになっ状態維持 ' "データ" を定義していない' とその私のコールバックを参照する...このコードfunction(data){...}

は、ここに私のコードです。 Obviosly dataはまだ定義されていませんが、AJAX呼び出しで返されたdataの参照方法はありますか?

+2

'save_email_template()'関数にコールバックを渡さないでください。代わりに、関数からajax呼び出しを返し、[.done() 'または' .then() 'ハンドラを[jqXHR](http://api.jquery.com/jQuery.ajax/#jqXHR)に記述します。返されます。 – dave

+1

@dave TBH、コールバックには何も問題はありません... DigitalMC:私はこの質問をはっきりと理解していないので、なぜそのエラーが出るのかわかりません。それは完全なコードですか? –

+0

@dave戻り値にアクセスするには変数にsave_email_template()関数を入れる必要はありませんか?私はそれを設定する方法についてはちょっと混乱しています。 – DigitalMC

答えて

1

コールバックをsave_email_template()関数に渡さないでください。その代わりに関数からajax呼び出しを返し、返されるjqXHR.done()または.then()ハンドラを記述します。これにより、関数を呼び出して、コードの同じ領域にコールバックロジックを定義することができます。

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 
}); 
関連する問題