ajax不是命名空间内的函数

时间:2018-03-06 15:40:59

标签: javascript jquery ajax namespaces javascript-namespaces

我正在尝试创建一个包含我的应用程序的所有调用的命名空间,但我不知道为什么当我尝试在命名空间内执行Ajax调用时它会说ajax不是函数

我尝试将jQuery设置为依赖项并将其传递给命名空间但仍然存在问题

这是js

   var FOF = FOF || {};
   FOF.Users = {
    init: function(userRequest){

    var request = userRequest.request || '';
    var callbacks = userRequest.callbacks || {};
    var userId = userRequest.userId || 0;
    var event = userRequest.domainEvent || false;
    var dependency = userRequest.dependency ||  false;
    console.log(userRequest.dependency);
    console.log(userRequest);


    switch(request) {
        case 'getUser':{
            FOF.Users.getUserData(callbacks,dependency);
            break;
        }
        default:{
            console.log('Param Request Empty or not valid');
        }
    }


    },
    getUserData : function(callbacks,dependency){

        dependency.ajax({
            url: "Mocks/users.json",
            data: {},
            dataType: "json",
            method: 'get',
            success: function (data) {
                if (!isObjectEmpty(callbacks)) {
                    callbacks.run(data);
                }
                if(event){
                    document.dispatchEvent(new CustomEvent(event, {detail: {data}}));
                }

            },
            error : function (data) {
                if (!isObjectEmpty(callbacks)) {
                    callbacks.errors(data);
                }
                if(event){
                    document.dispatchEvent(new CustomEvent(event, {detail: {data}}));
                }
            },
            cache: false,
        });


        /*
        var xhr = new XMLHttpRequest();
        xhr.open('GET', encodeURI('Mocks/users.json'));
        xhr.onload = function() {
            if (xhr.status === 200) {
                console.log('Request Done', xhr);

            }
            else {
                console.log('Request Failed');
            }
        };
        xhr.send();
        */

    }

}




$(document).ready(function($){

    var userRequest = {
        dependency : jQuery,
        request: 'getUser',
        userId : 1,
        callbacks :getUserCallbacks,
        domainEvent: 'getUser' 
    }

    var getUserCallbacks = {
        run: function(data){
            console.log(data);
        },
        errors: function(data) {
            console.log(data);
        },
        serverError : function(data){
            console.log('La Culpa es de Api, preguntar a Pedro');
        },
    }

    FOF.Users.init(userRequest);
});




function isObjectEmpty(obj) {
    return Object.keys(obj).length === 0;
}

还有一个普通人 https://plnkr.co/edit/1fPelOGyMiroOWWXMXXU?p=preview

我希望我的英语很好,如果您有任何疑问,请问我 谢谢!

1 个答案:

答案 0 :(得分:1)

这一行:

var dependency = FOF.Users.jQuery ||  false;

PDF.Users.jQuery实际上并不是jQuery(它似乎未定义)。

你或许想说:

var dependency = usersRequest.dependency || false

修改

我打赌你的AJAX请求会通过,但由于hoisting以及你在userRequest之前声明getUserCallbacks这一事实,你的回调没有被调用{1}}。

getUserCallbacks之前声明userRequest - 否则,userRequest.callbacks将为undefined

var getUserCallbacks = {
    run: function(data){
        console.log(data);
    },
    errors: function(data) {
        console.log(data);
    },
    serverError : function(data){
        console.log('La Culpa es de Api, preguntar a Pedro');
    },
};

var userRequest = {
    dependency : jQuery,
    request: 'getUser',
    userId : 1,
    callbacks :getUserCallbacks,
    domainEvent: 'getUser' 
}

编辑#2

除了我之前的编辑,你还要在标题中加入jQuery slim。 jQuery slim不包含jQuery的ajax功能。如果你想使用ajax,只需要包含jQuery而不是jQuery slim。