Я пытаюсь предоставить функцию обратного вызова для вызова ajax, где имя функции сохраняется в атрибуте «data-apply» формы.Обратный вызов Javascript по имени функции в атрибуте данных
jQuery(function($) {
$('form[data-async]').on('submit', function(event) {
var $form = $(this);
var $target = $($form.attr('data-target'));
var apply = $form.attr('data-apply');
$.ajax({
type: $form.attr('method'),
url: $form.attr('action'),
data: $form.serialize(),
success: function(data, status) {
var callBackFunc = new Function(apply);
callBackFunc.call();
}
});
event.preventDefault();
});
});
function addBubble(){
alert('a');
}
Форма:
<form id="111" class="form-horizontal " data-async data-target="#rating-modal" data-apply="addBubble();" action="/some/action/performed" method="POST">
Я хочу, чтобы избежать использования eval()
в этом случае, поскольку eval()
может вызвать проблемы с безопасностью и производительностью. Не уверен, что Function()
- более безопасный метод, или есть совершенно другой способ справиться с этим.
Итак, есть ли способ передать функцию обратного вызова, чтобы справляться с ситуациями разности?
Исходный код был заимствован из: https://gist.github.com/havvg/3226804
Вы можете просто сделать 'window [apply]()'. '.call()' используется, если вы хотите изменить значение 'this' внутри функции. –
Я знаю, я хотел уважать то, как он вызывал функцию обратного вызова, вот и все –