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

时间:2013-06-17 13:27:24

标签: jquery

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

1 个答案:

答案 0 :(得分:1)

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

解决此问题的正确方法是使用回调方法或使用ajax promise。

实施例

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