フォームの "data-apply"属性の下に関数名が保存されるajax呼び出しのコールバック関数を提供しようとしています。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()
がより安全な方法であるか、これを処理する全く異なる方法があります。
違いがある状況を処理するために関数コールバックを渡すにはどうしてですか?関数がグローバルに定義されているので、あなたがwindow
オブジェクトを通してそれを呼び出すことができますhttps://gist.github.com/havvg/3226804
'window [apply]()'を実行するだけです。 '.call()'は、関数内の 'this'値を変更する場合に使用されます。 –
私は彼がコールバック関数を呼び出す方法を尊重したいと思っていました。 –