使用AJAX执行通过PHP交付的javascript代码
我已经被难住了大约两个小时了 我的问题是,我需要使用PHP和Ajax从MySQL数据库加载一个数组,并在JavaScript中使用该数组 我使该部分工作正常,但是它引用“onClick”并包含要运行的函数的部分不工作。它提供了许多错误,这些错误说明了完全相同的事情使用AJAX执行通过PHP交付的javascript代码,javascript,php,mysql,ajax,Javascript,Php,Mysql,Ajax,我已经被难住了大约两个小时了 我的问题是,我需要使用PHP和Ajax从MySQL数据库加载一个数组,并在JavaScript中使用该数组 我使该部分工作正常,但是它引用“onClick”并包含要运行的函数的部分不工作。它提供了许多错误,这些错误说明了完全相同的事情 未捕获范围错误:超过最大调用堆栈大小 在按钮处..onClick(app.js:1281) 该阵列的示例如下所示: [ { "text": "Lost to Competitor", "onCl
未捕获范围错误:超过最大调用堆栈大小
在按钮处..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();
我加载数组的代码如下所示:
[
{
"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); };
});
});
你为什么使用
window.eval.call()
而不是eval(v.onClick)
?@Barmar,嘿!我最初尝试使用eval(v['onClick']),但是它不起作用,所以我环顾了一下其他问题,发现了这个问题,所以我尝试了一下。我还需要将变量el
和stages
传递给onClick函数。closeOpportunity()
是否返回函数?您试图使用(el,stages)
调用eval的结果。我现在必须运行,onClick
属性需要对函数求值,而不是直接调用函数。我注意到这一点是为了您的利益:比我更差的人会利用您使用eval()
。这不是一个很好的解决方案。对固定字符串使用eval()
有什么意义?只需编写closeOpportunity(v.text、el、stages)