javascript - 如何通过名称调用函数并作为参数传递?

标签 javascript jquery ajax function ecmascript-6

如何通过名称调用函数并作为参数传递?我的用例是下一个,我有一个 switch case,我在其中设置 api ajax 调用的data,一旦 ajax 完成,就应该调用 print函数将数据结果作为参数传递。我不确定这是一个好方法,有没有更好、更简单的方法来完成我正在尝试的事情?也许使用async/promises

function printUpcoming(data) {
    //stuff
}

function printRecently(data) {
    //stuff
}

function printPopular(data) {
    //stuff
}

function requestAjax(dataSend, callFunctionByName) {
    $.ajax({
        type: "POST",
        url: "api-url",
        headers: {
            "Accept": "application/json",
            "user-key": "userkey"
        },
        data: dataSend,
        dataType: 'json',
        success: function(data) {
            jsonVal = data[0];
            //Call the function print depending of switch case option
            callFunctionByName(jsonVal);
        }
    });
}

switch (param) {
    case "upcoming":
        dataSend = "fields * where whatever 1";
        functionName = printUpcoming();
        requestAjax(dataSend, functionName);
        break;
    case "recently":
        dataSend = "fields * where whatever 2";
        functionName = printRecently();
        requestAjax(dataSend, functionName);
        break;
    case "popular":
        dataSend = "fields * where whatever 3";
        functionName = printPopular();
        requestAjax(dataSend, functionName);
        break;
}

最佳答案

一种选择是将函数分组到一个对象中:

const Printer = {
    upcoming(data) {...},
    recently(data) {...},
    popular(data) {...},
}

然后

requestAjax(dataSend, param)

以及在requestAjax

Printer[funcName](jsonVal))

正如@VLAZ 建议的那样,另一个选择是完全摆脱回调:

async function requestAjax(dataSend) {...}

...

printUpcoming(await requestAjax(...))

示例:

function printUpcoming(x) {
  console.log('Upcoming!', x)
}

async function request() {
  return $.ajax('https://jsonplaceholder.typicode.com/todos/1')
}

async function process(param) {
  switch (param) {
    case "upcoming":
      printUpcoming(await request());
      break;
    case "recently":
      printRecent(await request());
      break;
  }
}

process('upcoming')
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

关于javascript - 如何通过名称调用函数并作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57753731/

相关文章:

javascript - jQuery 插件 - 奇怪的点击行为

jquery - 从下拉列表助手中删除一个元素

javascript - slim 框架和 ajax。 '/' 字符作为参数

javascript - 在 codeigniter 中使用 ajax 单击按钮时更新成功后显示确认

javascript - 500 (Internal Server Error) - 用户注册系统 - Laravel

javascript - 如何在 Highcharts 中动态更改 y 轴的单位?

javascript - 使用 JSON 制作 XmlHttpRequest POST

javascript - 使用 Selenium 收集 Javascript 下拉菜单上的每个选项

jquery - 将两个 jQuery .val() 结果合并到变量中

javascript - 有条件地删除html节点