javascript - 使用 AJAX 执行通过 PHP 交付的 javascript 代码

标签 javascript php mysql ajax

我已经被这个问题困扰了大约两个小时。

我的问题是我需要使用 PHP 和 Ajax 从 MySQL 数据库加载数组,并在 JavaScript 中使用该数组。

我让该部分工作正常,但是它引用“onClick”并包含要运行的函数的部分不起作用。它提供了许多错误,这些错误说的是完全相同的事情。

Uncaught RangeError: Maximum call stack size exceeded at buttons.<computed>.onClick (app.js:1281)

数组示例如下:

[
    {
        "text": "Lost to Competitor",
        "onClick": "closeOpportunity(\"Lost to Competitor\", el, stages)"
    },
    {
        "text": "No Budget \/ Lost Funding",
        "onClick": "closeOpportunity(\"No Budget \/ Lost Funding\", el, stages)"
    },
    {
        "text": "No Decision \/ Non-responsive",
        "onClick": "closeOpportunity(\"No Decision \/ Non-responsive\", el, stages)"
    },
    {
        "text": "Price",
        "onClick": "closeOpportunity(\"Price\", el, stages)"
    },
    {
        "text": "Other",
        "onClick": "closeOpportunity(\"Other\", el, stages)"
    },
    {
        "text": "Won via Another Opportunity",
        "onClick": "closeOpportunity(\"Won via Another Opportunity\", el, stages)"
    }
]

我加载数组的代码如下:

function closeOpportunity(name, el, stages) {
    $$("#opportunity_loss_reason2").text(name);
    $$("#closedType").text("Closed Lost");
    $$("#convertToProject").hide();
    $$("#lostReasonLI").show();
    upStepper(el, stages);
}

var stages = [
    "enquiry",
    "qualification",
    "proposal",
    "negotiation",
    "closed"
];

var buttons = [];

app.request.json('scripts/lostButtonsArray.php', function (data) {
    buttons = data;
    console.log(buttons);
});

buttons.forEach((v, i) => {
    console.log(v['onClick']);
    buttons[i]['onClick'] = function() { window.eval.call(window, v['onClick'])(el, stages); };
});

app.dialog.create({
    title: 'ECOM',
    text: 'Why was the opportunity lost?',
    cssClass: 'custom-dialog',
    closeByBackdropClick: 'true',
    buttons: buttons,
    verticalButtons: true,
}).open();

我已经尝试过使用常规 eval()并直接加载代码,无需任何帮助程序(eval、window.eval)。

如果我没有提供足够的信息,我很乐意提供更多信息来帮助解决此问题。

最佳答案

找到解决方案。

我试图加载“名称”而不是“文本”

工作功能

app.request.json('scripts/lostButtonsArray.php', function (data) {
        buttons = data;
        buttons.forEach((v, i) => {
            buttons[i]['onClick'] = function() { eval('closeOpportunity')(v['text'], el, stages); };
        });
    });

关于javascript - 使用 AJAX 执行通过 PHP 交付的 javascript 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59832118/

相关文章:

javascript - 这些数组有什么区别?

php - 为什么我的 cookie 不工作 PHP

php - 当 Laravel 队列 :listen times out 时获取当前正在运行的任务

mysql - 优化未按预期使用索引的日期时间字段

javascript - 有没有办法使字符串等于数组中的数字?

javascript - 过滤所有ID以 "ent."开头的CouchDB文档

javascript - 复制JS对象并过滤掉某些属性的最简单方法

php - 缓存包含或需要的文件以便可以反复使用?

javascript - Mysql 查询检索帖子并根据特定日期间隔进行过滤

javascript - 如何将 node.js 连接到 mysql 和 wamp/xampp 服务器?