我对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