Vra

Ek het 'n probleem met die javascript hieronder waarin die $.ajax oproep word nie gebel nie.Die alert('foo') gebeur wel, maar dan word die data-oproep heeltemal oorgeslaan en die terugbel word nooit bereik nie (nooit kry alert('success!').Ek verstaan ​​nie heeltemal terugbelopings nie, maar dit lyk of dit moet werk.

Wysig

Het die draaiboek geredigeer tot waar ek tans staan, aangesien ek so gelees het, is beter praktyk.Tog kan ek inspring authenticate(), dit breek aan url:[...], maar maak dan nooit eintlik die ajax-oproep nie.Ek het probeer om die terugkeer te verwyder net om te sien of dit die probleem is, maar dit lewer dieselfde resultaat.

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);
            }
        })
    }
});
Was dit nuttig?

Oplossing 2

Die oplossing is 'n mengsel van e.preventDefault() en die gebruik van 'n terugbel in die ajax-oproep.Net die gebruik van die terugbel het nie die probleem opgelos nie, maar bygevoeg preventDefault na die authenticate funksie en die oplossing van die terugbelprobleem gedoen het.

Die finale, werkende weergawe, lyk nou iets soos volg:

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);
                });
            }
        })
    }
});

Ander wenke

Gebruik eerder 'n terugbel.

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!");
});
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top