如何使用另一个 JavaScript 文件中定义的类名调用回调函数

How to call the callback function with class name defined in another javascript file

本文关键字:名调用 回调 函数 定义 何使用 另一个 JavaScript 文件      更新时间:2023-09-26

我试图用类名调用回调函数,在另一个javascript文件中定义,但我未能调用。我没有犯错。请让我知道我在下面的代码中犯的错误,并感谢您的帮助。

我创建了一个中央JavaScript文件,如下所示

中央脚本.js

function CentralScript() {
}
CentralScript.prototype.makeRequest = function (className, cbf, dataToSend) {
    $.ajax({
        url: 'apiurl',
        type: 'POST',
        dataType: 'json',
        data: {
            parameters : dataToSend
        },
        success: function (responseData) {
            this.showResponse(className, cbf, responseData);
        },
        complete: function() {
        },
        error: function () {
            console.log("Error occurred...");
        }
    });
};
CentralScript.prototype.showResponse = function (className, cbf, data) {
    className.cbf(data);
};

我创建了另一个文件,如下所示

某文件.js

function SomeFile() {
}
SomeFile.prototype.sayHi = function() {
    var obj = new CentralScript();
    var dataToSend = {
        method: 'someMethod'
    };
    obj.makeRequest('SomeFile', 'resultToShow', dataToSend);
};
SomeFile.resultToShow = function (data) {
    console.log(data);
};

我已经创建了如下所示的主.js文件

主.js

var ProjectName= (function() {
    var sfObj;
    function init() {
        createObjects();
        initiateProject();
    }
    function createObjects() {
        sfObj = new SomeFile();
    }
    function initiateProject() {
        sfObj.sayHi();
    }
    return {
        init : init
    };
})();
$(ProjectName.init);

当我从 SomeFile.js 文件发出 ajax 请求时,我收到了响应,但响应没有登录控制台。

我在中央脚本文件中的"显示响应"函数中得到未定义的"cbf.js

CentralScript.prototype.showResponse = function (className, cbf, data) {
   className.cbf(data);
};

我可以调用回调函数,就像 "className.cbf(data);" 存在于 SomeFile 中吗.js

请让我知道我犯的错误,谢谢你的帮助。

该问题与多个文件无关。这是更正的脚本:

//CentralScript.js
    function CentralScript() {
    }
    CentralScript.prototype.makeRequest = function (className, cbf, dataToSend) {
        var $this = this;//save for further use
        $.ajax({
            url: 'apiurl',
            type: 'POST',
            dataType: 'json',
            data: {
                parameters: dataToSend
            },
            success: function (responseData) {
                //cbf(responseData);//cbf is SomeFile.resultToShow
                $this.showResponse(className, cbf, responseData);//this is $.ajax here
            },
            complete: function () {
            },
            error: function () {
                console.log("Error occurred...");
            }
        });
    };
    CentralScript.prototype.showResponse = function (className, cbf, data) {
        //className.cbf(data);//undefined
        cbf(data);//cbf is SomeFile.resultToShow
    };
//SomeFile.js
        function SomeFile() {
    }
    SomeFile.prototype.sayHi = function () {
        var obj = new CentralScript();
        var dataToSend = {
            method: 'someMethod'
        };
        //obj.makeRequest('SomeFile', 'resultToShow', dataToSend);
        obj.makeRequest(this, this.resultToShow, dataToSend);//this is SomeFile
    };
    SomeFile.prototype.resultToShow = function (data) {//need .prototype to add function to SomeFile
        console.log(JSON.stringify(data));
    };