AJAX 不是命名空间中的函数

ajax is not a function inside a namespace

提问人:Vistor 提问时间:3/6/2018 最后编辑:Vistor 更新时间:3/7/2018 访问量:422

问:

我正在尝试创建一个包含应用程序所有调用的命名空间,但我不知道为什么当我尝试在命名空间内进行 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;
}

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

我希望我的英语足够好,如果您有任何问题请问我 谢谢!

JavaScript jQuery ajax 命名 javascript 命名空间

评论


答:

1赞 Adam Jenkins 3/6/2018 #1

这一行:

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

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

你是不是想说:

var dependency = usersRequest.dependency || false

编辑

我敢打赌你的 AJAX 请求通过了,但你的回调没有被调用,因为提升和你之前声明的事实。userRequestgetUserCallbacks

声明之前 - 否则,将是 .getUserCallbacksuserRequestuserRequest.callbacksundefined

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,只需包含 jQuery 而不是 jQuery slim。ajax

评论

0赞 Vistor 3/7/2018
哎呀,是的,我更改了它以测试解决方案并忘记了它,我已经更新了代码,但仍然无法正常工作
0赞 Vistor 3/7/2018
同样的错误,即使我将其作为依赖项传递,它也找不到jqueryUncaught TypeError: dependency.ajax is not a function
1赞 Adam Jenkins 3/7/2018
@Vistor - 查看我对答案的编辑,它们将解决您的问题。
0赞 Vistor 3/7/2018
我明白了,该死的引导。现在它工作正常,谢谢!