سؤال

أواجه مشكلة في JavaScript أدناه $.ajax لا يتم استدعاء المكالمة. ال alert('foo') يحدث ، ولكن بعد ذلك يتم تخطي مكالمة البيانات تمامًا ولا يتم الوصول إلى رد الاتصال أبدًا (لا تحصل أبدًا alert('success!'). لا أفهم عمليات الاسترجاعات تمامًا ، لكن يبدو أن هذا يجب أن يعمل.

يحرر

تم تحرير البرنامج النصي إلى حيث أقف حاليًا ، حيث قرأت هذه الطريقة هي ممارسة أفضل. لا يزال ، يمكنني التدخل في authenticate(), ، ينفصل url:[...], ، ولكن بعد ذلك لا تقوم أبدًا بإجراء مكالمة أياكس. لقد حاولت إزالة العودة لمجرد معرفة ما إذا كانت هذه هي المشكلة ، لكنها تنتج نفس النتيجة.

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