0

success呼び出しの関数内でグローバル変数にアクセスしようとしてい$.ajax()ます。基本的に私はこのようなものを持っています:

function someFunc(email) {
var ret;
$.ajax({
    url: '/checkuseremail.php?email='+email,
    cache: false,
    success: function(data) {
        if ( data != '1' ) {
            alert(email+'\n'+data);
            ret = false;
        } else {
            alert(email+'\n'+data);
            ret = true;
        }
    }
});

alert(ret); // outputs "undefined"
return ret;
}

ajax応答が与えられる前に一番下が呼び出されていることは承知してalert()いますが、他に何をすべきかわかりません。return ステートメントをsuccess関数内に配置するだけですが、親関数ではなく、その関数のみが返されます。

これを行う方法はありますか?

4

3 に答える 3

0

成功を、値を返す関数のように考えないでください。$.ajax()これは、コントローラーのように、成功(イベント)に対して実行するアクションを決定 する設定です。

いくつかの問題があります。

  1. あなたはあなたの元の投稿でそれを言いました。制御がクライアントの手に戻る前に、アラートを呼び出しています。

  2. エラーメッセージはあなたにこれを伝えていました。 Undefined関数から値を返すときは、それを何かに割り当てる必要があります。 ret関数に対してグローバルですが、値が割り当てられることはありません。

  3. dataまた、値に対して返されたオブジェクトを解析する必要があります。data != '1'サンプルコードだけだと思いますか?JSONオブジェクトを取得している可能性が最も高く、おそらくXMLですが、どちらの方法でも適切に解析されていません。

  4. $ .ajax()の代わりに$ .get ()を使用する必要があります。 $.getを呼び出し$.ajax、推奨される方法です。

    function someFunc(email) {
    // assign the value returned to ret
    var ret = $.get({ // 2 assign value, 4 use $.get
        url: '/checkuseremail.php?email='+email,
        cache: false,
        success: function(data) {
            if ( data ) {
                anotherFunc(data); // 3 parse data in function
                return false;//1 alert removed
            } else {
                return true;
            }
        }
    });
    
    alert(ret);
    return ret;
    };
    

    `

于 2013-03-03T00:17:42.080 に答える
0

$ .Deferred()を確認するか、2番目のパラメーターとしてコールバック関数をsomeFuncに渡します。次に、成功時にそのコールバック関数を呼び出します。

于 2013-03-02T22:42:19.530 に答える
0

最後のコメント「...関数は、フォームが送信されたときにフォーム検証の一部として呼び出されます」を考えると、あなたの要件はリクエストの同期処理に変換されると思います。そのような場合、ajax 呼び出しで同期動作を強制できます。追加してみてください:

async: false,

あなたのAjaxオプションに。

于 2013-03-02T23:35:02.623 に答える