Frage

Ich habe ein Problem mit dem Javascript unten, in dem die $.ajax Anruf wird nicht angerufen.Der alert('foo') kommt zwar vor, aber dann wird der Datenaufruf komplett übersprungen und der Rückruf wird nie erreicht (niemals abgerufen). alert('success!').Ich verstehe Rückrufe nicht ganz, aber es scheint, als ob es funktionieren sollte.

Bearbeiten

Ich habe das Skript auf den aktuellen Stand gebracht, da ich gelesen habe, dass dies eine bessere Vorgehensweise ist.Dennoch kann ich eingreifen authenticate(), es bricht weiter url:[...], macht dann aber nie wirklich den Ajax-Aufruf.Ich habe versucht, die Rückgabe zu entfernen, nur um zu sehen, ob das das Problem ist, aber es führt zum gleichen Ergebnis.

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);
            }
        })
    }
});
War es hilfreich?

Lösung 2

Die Lösung ist eine Mischung aus e.preventDefault() und Verwenden eines Rückrufs im Ajax-Aufruf.Die bloße Verwendung des Rückrufs hat das Problem nicht gelöst, sondern das Hinzufügen preventDefault zum authenticate Funktion und Behebung des Rückrufproblems hat funktioniert.

Die endgültige, funktionierende Version sieht nun etwa so aus:

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

Andere Tipps

Verwenden Sie stattdessen einen Rückruf.

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!");
});
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top