0

试图让 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();
        }
    });
}
4

1 回答 1

1

由于您使用的是 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
于 2013-06-17T13:29:49.293 回答