jquery - 从异步 Ajax 请求`then`调用中的函数返回结果
问题描述
这些新方法仍然很新。
如下声明一个异步 ajax 请求:
async function doAjax(email) {
let result;
try {
result = await jQuery.ajax({
url: ajaxurl,
type: 'POST',
data: {"action": "custome_ajax_email_check", "guestemail": email }
});
return result;
} catch (error) {
console.error(error);
}
}
这是在另一个名为的函数中调用的validate()
function validate() {
var email = jQuery("#billingemail").val();
if (isValidEmailAddress(email)) {
doAjax(email).then( (data) => ajaxCallResult(data) )
}
. . . . .
调试到现在,它确实如您所愿... into validate()
, on doAjax()
,这是最后一个名为(缩小)的函数:
function ajaxCallResult(data){
data = jQuery.parseJSON(data);
if(!data.result) {
return true;
}
else {
return false;
}
}
但是现在我需要从ajaxCallResult()
... 返回(在这种情况下为布尔值),因为 true 或 false 表示用户电子邮件是否存在。
但是由于它是链接的,我不确定如何将它声明为一个变量来返回结果。
解决方案
在函数之后重构代码ajaxCall
,使其按顺序运行,您可以通过传递回调来验证函数并在承诺解决时编写代码来实现。
async function doAjax(email) {
let result;
try {
result = await jQuery.ajax({
url: ajaxurl,
type: 'POST',
data: {"action": "custome_ajax_email_check", "guestemail": email }
});
return result;
} catch (error) {
console.error(error);
}
}
function ajaxCallResult(data){
data = jQuery.parseJSON(data);
if(!data.result) {
return true;
}
else {
return false;
}
}
function validate(successCb) {
var email = jQuery("#billingemail").val();
if (isValidEmailAddress(email)) {
return doAjax(email)
.then((data) => {
return successCb(ajaxCallResult(data));
});
}
}
// Calling validate function
validate(function(data) {
// Response from ajaxCallResult function
console.log(data);
});
推荐阅读
- bash - bash用变量值替换字符串中的变量名
- react-leaflet - 不显示图像叠加
- c# - 原子符号链接替换windows c#抛出IOException“此应用程序不支持符号链接上的当前操作”
- javascript - Bootstrap 4 下拉菜单通过悬停出现
- python - {“错误”:“格式错误的请求:POST /v1/models/text_model”} Tensorflow 服务
- javascript - 如何在卡片末尾对齐项目,垂直居中(使用引导程序 4)?
- woocommerce - 仅显示 WooCommerce 父属性
- angular - 从组件到组件获取数据?(角度)
- r - 根据条件使用 left_join 合并数据
- reactjs - 如果我有 useState,则重新安装反应功能组件