“ajax”中的“a”代表“异步”(“Asynchronous JavaScript And 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调用以非常用户不友好的方式锁定大多数浏览器的UI。相反,如上所述稍微重构您的代码。
但仅仅是为了完整性:
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;
}