【问题标题】:ajax is not a function inside a namespaceajax 不是命名空间内的函数
【发布时间】:2018-08-14 12:55:57
【问题描述】:

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


    【解决方案1】:

    这一行:

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

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

    你是不是想说:

    var dependency = usersRequest.dependency || false
    

    编辑

    我敢打赌你的 AJAX 请求会通过,但你的回调没有被调用,因为 hoisting 以及你在 getUserCallbacks 之前声明了 userRequest 的事实。

    声明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。

    【讨论】:

    • Opps,是的,我改变了它试图测试解决方案并忘记了它,我已经更新了代码,但仍然无法正常工作
    • 同样的错误Uncaught TypeError: dependency.ajax is not a function 即使我将它作为依赖传递它也找不到jquery
    • @Vistor - 查看我对答案的编辑,它们将解决您的问题。
    • 我明白了,该死的引导程序。现在它工作正常,谢谢!
    猜你喜欢
    • 2017-10-24
    • 1970-01-01
    • 2015-03-05
    • 2012-06-13
    • 2016-07-10
    • 2016-06-19
    • 2012-06-11
    • 2012-06-11
    • 1970-01-01
    相关资源
    最近更新 更多