0

私は単純な再利用可能な ajax 関数を作ろうとしています。Google で何時間も費やし、自分自身を試してみた後、助けを求める以外に選択肢はありません。

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同じパラメーターを使用して呼び出すだけの関数ができたことに注意してください!)

promise を取得したら、その promise が解決されたときにコールバックをトリガーできます。

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 に答える