我有一個函數runAjax,它可以正常工作。不幸的是我掙扎着返回從ajax查詢中獲得的值。JQuery AJAX函數的工作原理,但無法正確返回變量
ajax函數將「contents」或「error」xml標記內的返回值賦給變量「result」。
如果我警告ajax函數內的結果變量,它會提示正確的值(即如果內容中的xml值是「已發佈」,它會發布警報)。
但是,如果我警告從runAjax函數返回的值,它會警告一個對象,而不是上面示例中「發佈」的內部變量「result」的值。
function runAjax (data_obj){
return $.ajax({
url:"/ajax.php",
dataType: "xml",
data: data_obj,
success: function(data) {
// format result
var xml;
if (typeof data == "string") {
xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = false;
xml.loadXML(data);
} else {
xml = data;
}
var result;
if($("error",xml).text()){
result = [$("error",xml).text()];
} else{
result = [
$("contents", xml).text()
];
}
alert(result); //alerts the correct string for example "published"
return result;
}
});
}
$('ul.content li span.changeable').click(function(e){
e.preventDefault();
var method_set = $(this).parent().attr("class");
var id_set = $(this).parent().parent().find('li.id span').html();
var user = $(this);
var result = runAjax({method: method_set, id: id_set});
alert(result); //alerts an object not published
});
我確定它與我返回變量的方式有關,但我無法弄清楚。任何輸入將不勝感激。
問候 盧克
UPDATE: 這是從人以下的作品感謝所有輸入修改後的代碼:
function runAjax (data_obj,callback){
$.ajax({
url:"/ajax.php",
dataType: "xml",
data: data_obj,
success: function(data) {
// format result
var xml;
if (typeof data == "string") {
xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = false;
xml.loadXML(data);
} else {
xml = data;
}
var result;
if($("error",xml).text()){
result = [$("error",xml).text()];
} else{
result = [
$("contents", xml).text()
];
}
if (typeof(callback) == "function") {
callback(result);
}
}
});
}
$('ul.content li span.changeable').click(function(e){
e.preventDefault();
var method_set = $(this).parent().attr("class");
var id_set = $(this).parent().parent().find('li.id span').html();
var user = $(this);
runAjax({
method: method_set,
id: id_set
},
function(result){
$(user).html(result.join('')); //this is instead of alert(result);
}
);
});
我沒有考慮過使用同步調用,因爲它通常不合適,但如果沒有其他選項,它可能是處理事情的有效方法。取決於發佈的AJAX處理要求是什麼。 – belugabob 2010-06-23 13:42:13
感謝馬里奧,你所做的最後一次編輯只是縮小了你的答案,因爲我不想在每次調用函數時寫出整個成功函數。非常感謝你的魅力。 – Luke 2010-06-23 14:04:38