ajax作为函数返回,如何从用户定义的函数返回ajax成功

“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;

}