문제

아래의 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 호출에서 콜백을 사용합니다. 콜백을 사용하는 것만으로도 문제가 해결되지는 않았지만 추가 preventDefault ~로 authenticate 콜백 문제를 기능하고 수정했습니다.

최종 작업 버전은 이제 다음과 같습니다.

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