質問

以下のJavaScriptに問題があります。 $.ajax 呼び出しは呼ばれていません。 alert('foo') 起こりますが、その後、データコールが完全にスキップされ、コールバックに到達することはありません(決して取得しないでください alert('success!'). 。私はコールバックを完全には理解していませんが、これは機能しているはずです。

編集

私がこの方法で読んだので、私が現在立つ場所にスクリプトを編集しました。それでも、私は介入することができます authenticate(), 、それは壊れます url:[...], 、しかし、実際にAjaxコールを行うことはありません。それが問題であるかどうかを確認するためだけにリターンを削除しようとしましたが、同じ結果が生まれています。

define(["jQuery", "kendo", "modernizr", "app/environment"], function ($, kendo, modernizr, environment) {
    var authenticate = function (username, password) {
        return $.ajax({
            url: environment.apiConnection + '/canlogin?userid=' + username + '&password=' + password,
            type: 'get',
            dataType: 'jsonp'
        });
    }

    var canLogin = function(data) {
        alert('good');
    }

    return {
        viewModel: kendo.observable({
            username: null,
            password: null,
            authenticate: function () {
                var username = this.get('username'),
                    password = this.get('password');

                authenticate(username, password).done(canLogin);
            }
        })
    }
});
役に立ちましたか?

解決 2

解決策はの混合です e.preventDefault() Ajaxコールでコールバックを使用します。コールバックを使用するだけで問題は解決しませんでしたが、追加する preventDefaultauthenticate 機能とコールバックの問題の修正が行われました。

最終的な作業バージョンは、今では次のようになります。

define(["jQuery", "kendo", "modernizr", "app/environment"], function ($, kendo, modernizr, environment) {
    function authenticate(username, password, callback) {
        $.ajax({
            url: environment.apiConnection + '/canlogin?userid=' + username + '&password=' + password,
            type: 'get',
            dataType: 'jsonp',
            success: callback,
            error: function (x,t,r) {
                console.log('error')
            }
        });
    }

    function login(canLogin, username, password) {
        if (canLogin == false) {
            alert('Incorrect username or password');
            return;
        }

        alert('good');
    }

    return {
        viewModel: kendo.observable({
            username: null,
            password: null,
            authenticate: function (e) {
                e.preventDefault();
                var username = this.get('username'),
                    password = this.get('password');

                authenticate(username, password, function (canLogin) {
                    login(canLogin, username, password);
                });
            }
        })
    }
});

他のヒント

代わりにコールバックを使用します。

var canLogin = function (username, password, callback) {
    $.ajax({
        async: false,
        url: config.apiConnection + '/canlogin?userid=' + username + '&password=' + password,
        type: 'GET',
        dataType: 'jsonp',
        error: function (x, t, r) {
            alert('Error');
        },
        success: callback
    });

}

// use
canLogin("user","passwd",function( data ){
    alert("Im called on authentication success!");
});
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top