0

我正在尝试制作一个简单的可重用 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;
    });
}
4

3 回答 3

0

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

您可以做的是返回一个承诺,稍后再发回一个返回值。方便地,返回值$.post就是这样一个承诺:

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

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

一旦你得到了承诺,你就可以在承诺被解决时触发回调:

ajax_post(url, formdata).done(function(response) {
    alert(response);
});
于 2013-04-30T11:22:31.827 回答
0
function ajax_post(url, formdata){
    $.post(url, formdata, function (data){
        return data;
    });
}

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

所以在异步时间线的某个地方,有一个函数会返回一些东西给一个不再执行的函数。所以这行不通。

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

于 2013-04-30T11:19:48.347 回答
0

正确的做法是这样

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

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

希望你明白了。

对于你的问题,你为什么得到undefined

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

于 2013-04-30T11:14:40.407 回答