Javascript简单可重用的Ajax功能

时间:2013-04-30 10:21:23

标签: javascript jquery ajax

我正在尝试制作一个简单的可重用的ajax函数。在谷歌上花了几个小时,并试着自己,我别无选择,只能寻求帮助。

我正在从Javascript获得“未定义”警报。当我不使用函数方法时,它工作正常。以下是它的代码......

    $("#formloginadmin").submit(function (){
        var url = "ajax/ajax_login_admin.php";
        var txtemail    = $("#txtemail").val();
        var txtpass     = $("#txtpass").val();
        var formdata    = $('#formloginadmin').serialize();
        var revel       = true;

        txtemail            = $.trim(txtemail);
        txtpass             = $.trim(txtpass);

        response            = ajax_post(url, formdata);
        alert(response);
        return false;
    });                                     

function ajax_post(url, formdata){
    $.post(url, formdata, function (data){
        return data;
    });
}

3 个答案:

答案 0 :(得分:0)

正确的方法是

  

ajax_post(url,formdata).done(function(response){       警报(响应); });

您访问ajax请求响应的方式不正确。看看这个链接: jQuery Ajax POST example with PHP

希望你明白了。

对于您的问题,为什么要获得undefined

您的{p> response = ajax_post(url, formdata);是一个ajax调用,因此在返回该ajax调用之前会执行下一行alert(response);。因为调用ajax_post是异步的。

答案 1 :(得分:0)

function ajax_post(url, formdata){
    $.post(url, formdata, function (data){
        return data;
    });
}

这是一个内部调用$.post的函数。 $.post是一个异步函数,这意味着它不会返回其结果,但会在稍后通知您结果存在。这就是回调函数的作用。在回调函数(最内层函数)中,您将data作为参数并从回调函数返回。

所以在异步时间轴的某个地方,有一个函数可以返回一个不再执行的函数。所以这不起作用。

异步函数立即返回,稍后会通知您结果。所以你不能像同步事件那样返回数据。 Instaed你真的需要使用异步模式并使用回调。

答案 2 :(得分:0)

正如其他人已经说过的那样,$.post异步,这意味着你无法从中获得返回值。

您可以做的是返回promise以稍后发送返回值 。很简单,$.post的返回值就是这样一个承诺:

function ajax_post(url, formdata){
    return $.post(url, formdata);
}

(但请注意,您现在有一个函数除了使用相同的参数调用$.post之外什么都不做!)

一旦你得到了承诺,那么当该承诺已解决时,你就可以触发回调:

ajax_post(url, formdata).done(function(response) {
    alert(response);
});