【问题标题】:Define a callback for a function that utlizies DATA parameter from AJAX call为使用来自 AJAX 调用的 DATA 参数的函数定义回调
【发布时间】:2016-04-13 20:27:51
【问题描述】:

我正在尝试将<textarea> 中的 HTML 保存为电子邮件模板。这可以在多个地方完成,所以我想创建一个save_email_template() 函数,它可以接收参数并根据需要保存(我已经成功完成了)。

我还想在每次调用save_email_template() 函数时指定一个回调。问题在于回调内部我想以多种方式处理从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);
        }
    });

问题:

我不断收到 JS 错误“未定义数据”及其引用我的回调...此代码 function(data){...}。 Obviosly data 尚未定义,但如何引用 AJAX 调用中返回的 data

【问题讨论】:

  • 不要将回调传递给您的 save_email_template() 函数。相反,从函数返回 ajax 调用并在返回的 jqXHR 上编写 .done().then() 处理程序。
  • @dave TBH,回调没有任何问题... DigitalMC:我不清楚这个问题,我不明白你为什么会收到这个错误。这是完整的代码吗?
  • @dave 我不必将save_email_template() 函数放入变量中以访问返回吗?我对如何设置有点困惑。
  • @Karl-André Gagnon 是的完整代码。基本上,当我在回调中将“数据”定义为参数时,我的浏览器会说“数据”还不存在。我将更新代码以澄清。
  • @DigitalMC 更改您的函数以返回 ajax 调用。字面意思是return $.ajax(...)。然后处理响应save_email_template(options).then(function(data) { ... });

标签: javascript jquery ajax function callback


【解决方案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
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 2019-11-19
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    相关资源
    最近更新 更多