ajax调用返回promis并通过调用函数将其解析为其值

时间:2018-05-18 13:11:15

标签: ajax promise resolve

到现在为止,我读了大约6页,包含文档和stackoverflow答案,但我没有得到这个方法。

我的功能是在阅读了所有这样构建的东西之后:

async function getFToken(postId){
    const response = await $.ajax({
        type: "POST",
        url: ajax_object.ajax_url,
        data:{
        action:'get_f_token', 
        postId: postId,
        },
        success:function(response) {

        }
    });
    return response;
}

在我的其他功能中是这样的:

function getFeedback(postId){
    $(".show_company").hide();
    $(".show_feedback").show();
    $.ajax({
        type: "POST",
        dataType: "text json",
        url: ajax_object.ajax_url,
        data:{
        action:'get_feedback', 
        postId: postId,
        },
        success:function(response) {
            var postTitle = '';
            for (i in response) {
                postTitle += "<h1>" + response[i].post_title + "</h1><br/><br/>" + response[i].ID ;
                var test = getFToken(387);
                alert(Promise.resolve(test));
            };
            $("#result").html(postTitle);
        }
    });
}

有没有机会,这是一个更大的问题,因为我在另一个Ajax调用中调用async试图检索值?我试图从第一个ajax调用中获取字符串并将其传递给ajax调用中的第二个函数,以将其附加到我从WordPress检索的帖子

警报给了我[对象Promise],但我如何获得从php脚本传递的值?

PHP-scrtipt:

//get fToken from specific feedbacks
add_action( 'wp_ajax_get_f_token', 'get_f_token' );
function get_f_token() {
    if(isset($_POST['postId'])){
        $postId = $_POST['postId'];
    } 
    $fToken = get_post_meta($postId, 'fToken', true);
    echo $fToken;
    wp_die();
}

1 个答案:

答案 0 :(得分:1)

当您可以使用success / async时,请勿使用await回调:

async function getFToken(postId) {
    return $.ajax({
        type: "POST",
        url: ajax_object.ajax_url,
        data: {
            action: 'get_f_token', 
            postId: postId,
        }
    });
}

async function getFeedback(postId) {
    $(".show_company").hide();
    $(".show_feedback").show();
    const response = await $.ajax({
//                   ^^^^^
        type: "POST",
        dataType: "text json",
        url: ajax_object.ajax_url,
        data: {
            action: 'get_feedback', 
            postId: postId,
        }
    });
    let postTitle = '';
    for (const i in response) {
        postTitle += "<h1>" + response[i].post_title + "</h1><br/><br/>" + response[i].ID ;
        const test = await getFToken(387);
//                   ^^^^^
        alert(test); // no Promise.resolve, you don't want to alert a promise
    }
    $("#result").html(postTitle);
}