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

时间:2011-03-28 07:11:55

标签: function jquery return-value

我有波纹管功能。 在这里,我想从用户定义的函数返回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

}

感谢

2 个答案:

答案 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调用,就会执行此代码。