【发布时间】: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