繁体   English   中英

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

[英]Pass function reference to a separate Javascript file for callback

我为我所有的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建议,看来它只需要名称。

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

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

params['successCallbackFunction'] = 'testsuccess'

应该被更改为

params['successCallbackFunction'] = testsuccess

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM