的「一」,在「AJAX」代表「異步」(「異步JavaScript和XML」,雖然這些天大多數人使用JSON而不是XML使用它) 。
因此,您的Ajaxcall
函數在ajax調用完成之前返回,這就是爲什麼您不能將該消息作爲返回值返回的原因。
通常要做的事情是在回調,而不是經過:
Ajaxcall(id_array,"del", functon(msg) {
alert(msg);
});
function Ajaxcall(id_array,type, callback){
$.ajax({
type: "POST",
url: "serverpage.php",
cache:false,
data: ({id:id_array,type:type}),
success: function(msg){
callback(msg);
}
});
}
它是用JavaScript非常容易,因爲JavaScript的功能是closures,可以聯定義。因此,舉例來說,假設你想做到這一點:
function foo() {
var ajaxStuff, localData;
localData = doSomething();
ajaxStuff = getAjaxStuff();
doSomethingElse(ajaxStuff);
doAnotherThing(localData);
}
你可以從字面上重寫異步像這樣:
function foo() {
var localData;
localData = doSomething();
getAjaxStuff(function(ajaxStuff) {
doSomethingElse(ajaxStuff);
doAnotherThing(localData);
});
}
我要指出,這是可能使Ajax調用同步。在jQuery中,通過傳入async
選項(設置爲false
)來完成此操作。但它是一個非常糟糕的想法。同步ajax調用以非常不友好的方式鎖定大多數瀏覽器的用戶界面。相反,像上面那樣稍微重構你的代碼。
但只是爲了完整性:
alert(Ajaxcall(id_array,"del"));
function Ajaxcall(id_array,type){
var returnValue;
$.ajax({
type: "POST",
url: "serverpage.php",
cache:false,
async: false, // <== Synchronous request, very bad idea
data: ({id:id_array,type:type}),
success: function(msg){
returnValue = msg;
}
});
return returnValue;
}
ca我在該回調之外使用msg Ajaxcall(id_array,「del」,function(msg){\t \t});警報(MSG);像這樣 – Gowri 2011-03-28 07:27:59
@gowri,不,回調之外不存在'msg'。 – 2011-03-28 07:31:28
@gowri:您可以將它分配給您在包含範圍中聲明的變量,但是,您必須再次異步考慮 - 是否會在您使用它時設置它?這就是爲什麼我舉了一個例子,說明在JavaScript中修改循序漸進的邏輯以處理異步性非常簡單。在異步操作的時候,啓動一個新的函數,並將所有應該跟隨*的內容移到該函數中。你甚至可以嵌套這些。 – 2011-03-28 07:32:05