ajax不是命名空间内的函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ajax不是命名空间内的函数相关的知识,希望对你有一定的参考价值。

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

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

答案

这一行:

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

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

你或许想说:

var dependency = usersRequest.dependency || false

编辑

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

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。

以上是关于ajax不是命名空间内的函数的主要内容,如果未能解决你的问题,请参考以下文章

命名空间内的局部函数声明

命名空间内与类内的范围函数[重复]

获取命名空间内的所有类[重复]

命名空间内的类定义

命名空间范围内的静态关键字无用?

函数的 命名空间 作用域