jquery:调用一个函数

Jus*_*tin 1 javascript jquery function dynamic

好吧,我正在使用一些jquery创建动态弹出窗口.但是,定期响应将是我需要调用的函数的名称而不是实际数据,我试图弄清楚如何执行此操作.

success: function(response) {
                                var obj = $.parseJSON(response);
                                if (obj.response == 'false') {
                                    $('#popuperrDisplay').html(obj.msg);
                                    $('#popuperrors').show();
                                } else {
                                    if (obj.response == 'redirect') {
                                        window.location.href = obj.msg; 
                                    } else if (obj.response == 'function') {
                                        call obj
                                    } else {
                                        $(this).dialog('close');
                                    }
                                }
                            }
Run Code Online (Sandbox Code Playgroud)

这是我的jquery的当前部分.我需要弄清楚如何通过json_encode发送JS函数的名称,并让JS实际调用该函数

Bry*_*ard 5

如果函数是全局定义的(在window对象上),你可以简单地调用它:

if (obj.response === 'function' &&            // 1
    typeof window[obj.msg] !== 'undefined') { // 2

    window[obj.msg]();                        // 3
    // or...
    window[obj.msg].apply(null, obj.args);    // 4
}
Run Code Online (Sandbox Code Playgroud)
  1. 检查响应的类型是否为函数.
  2. 检查是否存在在窗口对象上定义的具有给定名称的函数.
  3. 调用该功能.
  4. 调用该函数并为其提供一组参数.

编辑:(window[]语法)

为了进一步说明,window['showPopup']访问对象的showPopup成员window.这跟做的一样window.showPopup.只是,[]语法具有接收string而不是实际代码的优点.

window['showPopup']将返回一个对象(如果已定义); 让它成为我们特定例子的一个功能.

然后我们使用()运算符调用该函数对象,如下所示:window['showPopup']().再次,这与这样做:window.showPopup().

编辑2 :(使用参数调用)

如果必须使用参数数组调用该函数,我们可以使用apply.调用该函数将如下所示:

window['showPopup'].apply(null, arrayOfArgs);
Run Code Online (Sandbox Code Playgroud)

arrayOfArgs包含参数的数组在哪里.