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