Jquery 使用带有函数的ajax返回xml文本

Jquery 使用带有函数的ajax返回xml文本,jquery,Jquery,试图让getFromWho函数从xml文件返回收件人文本,我可以让它记录文本,但由于某些原因,我无法让它在函数中返回 function preSubmit(){ var optionTexts = []; $("section").each(function(){ var h2 = $(this).find("h2").text(); optionTexts.push(h2); optionTexts.push("\n");

试图让getFromWho函数从xml文件返回收件人文本,我可以让它记录文本,但由于某些原因,我无法让它在函数中返回

function preSubmit(){
    var optionTexts = [];
    $("section").each(function(){
        var h2 = $(this).find("h2").text();
        optionTexts.push(h2);
        optionTexts.push("\n");
        $("ol li", this).each(function() { optionTexts.push($(this).text()) })
    });
    var splitText = optionTexts.join("\n");
    console.log(splitText)
    splitText += getFromWho();
    return splitText;
}

function getFromWho() {
    $.ajax({
        type: "GET",
        url: "forWho.xml",
        dataType: "xml",
        success: function(xml) {
            console.log($(xml).find('recipient').text())
            return $(xml).find('recipient').text();
        }
    });
}

由于您使用的是ajax,因此执行将是异步的,这意味着您无法从ajax回调返回任何值

解决这个问题的正确方法是使用回调方法或使用ajax承诺

function preSubmit(callback){
    var optionTexts = [];
    $("section").each(function(){
        var h2 = $(this).find("h2").text();
        //optionTexts.push("<b>");
        optionTexts.push(h2);
        optionTexts.push("\n");
        $("ol li", this).each(function() { optionTexts.push($(this).text()) })
    });
    var splitText = optionTexts.join("\n");

    getFromWho().done(function(xml){
        splitText += $(xml).find('recipient').text();
        callback(splitText)
    });

}

function getFromWho() {
    return $.ajax({
        type: "GET",
        url: "forWho.xml",
        dataType: "xml"
    });
}
preSubmit(function(splitText){
    //Do actions which depends on splitText
});
//You cannot do anything which depends on splitText here as preSubmit is asynchronous