我有波纹管功能。 在这里,我想从用户定义的函数返回ajax成功。怎么做
alert(Ajaxcall(id_array,"del"));
function Ajaxcall(id_array,type){
$.ajax({
type: "POST",
url: "serverpage.php",
cache:false,
data: ({id:id_array,type:type}),
success: function(msg){
return msg; //this returns nothing
}
});
alert(msg); // this one undefined
}
感谢
答案 0 :(得分:3)
“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;
}
答案 1 :(得分:1)
JQuery有许多全局Ajax事件处理程序,包括$.ajaxComplete()
和$.ajaxSuccess()
(ref:http://api.jquery.com/ajaxSuccess/)。
代码可以附加到任何DOM元素,如下所示:
/* Gets called when all request completes successfully */
$("#myElement").ajaxSuccess(function(event,request,settings){
$(this).html("<h4>Successful ajax request</h4>");
});
只要完成任何成功的Ajax调用,就会执行此代码。