将函数引用传递给单独的Javascript文件以进行回调

时间:2019-01-14 06:07:07

标签: javascript ajax

我已经为我所有的ajax调用创建了一个通用Javascript文件。我试图以此作为跟踪所有ajax调用的常用方法。下面是相同的代码。

function doAjax(doAjax_params) {
    var url = doAjax_params['url'];
    var requestType = doAjax_params['requestType'];
    var contentType = doAjax_params['contentType'];
    var dataType = doAjax_params['dataType'];
    var data = doAjax_params['data'];
    var beforeSendCallbackFunction = doAjax_params['beforeSendCallbackFunction'];
    var successCallbackFunction = doAjax_params['successCallbackFunction'];
    var completeCallbackFunction = doAjax_params['completeCallbackFunction'];
    var errorCallBackFunction = doAjax_params['errorCallBackFunction'];

       //Make the ajax call
    $.ajax({
        url: getBaseURL() + url,
        crossDomain: true,
        type: requestType,
        contentType: contentType,
        dataType: dataType,
        data: data,
        success: function (data, textStatus, jqXHR) {
            console.log(typeof successCallbackFunction);
            debugger
            //if (typeof successCallbackFunction === "function") {
                successCallbackFunction(data);
            //}
        },
        error: function (jqXHR, textStatus, errorThrown) {
            if (typeof errorCallBackFunction === "function") {
                errorCallBackFunction(errorThrown);
            }

        }
    });
    }

此代码获取参数列表,并根据参数创建ajax请求。此代码保存在文件APIHandler.js中。

我正在尝试从多个文件调用此函数。下面是一个示例调用。

function RedirectToDashboard() {
    var params = $.extend({}, doAjax_params_default);
    params['url'] = `profile/5`;
    params['successCallbackFunction'] = `testsuccess`
    doAjax(params);

}

function testsuccess() {
    alert("success");
}

运行此功能时,我可以成功拨打电话。唯一的问题是对回调函数的引用。 console.log(typeof successCallbackFunction);返回字符串而不是函数。

我认为JS的顺序可能有所不同。我正在加载APIHandler.js,然后加载页面特定的js。而且此ajax调用发生在单击按钮时,因此在进行ajax调用之前,将同时加载两个JS文件。

除此之外,我认为也许我发送的参数错误。这可能导致JS将函数名称视为字符串。但是我检查了有关如何传递函数的大多数google建议,看来它只需要名称。

还有什么我可能会想念的吗?

1 个答案:

答案 0 :(得分:2)

该死。我只是想出了为什么会导致错误。分配回调函数时,我使用了引号。发布问题后,我立即意识到出了什么问题。

params['successCallbackFunction'] = 'testsuccess'

应该更改为

params['successCallbackFunction'] = testsuccess