我正在尝试为ajax调用提供回调函数,其中函数名称保存在表单的“data-apply”属性下.
- 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对象调用它.
- window["functionName"].call();
从addBubble中删除括号
- <form id="111" class="form-horizontal " data-async data-target="#rating-modal" data-apply="addBubble" action="/some/action/performed" method="POST">
使用Javascript
- jQuery(function($) {
- $('form[data-async]').on('submit',status) {
- if(typeof window[apply] == "function")
- window[apply].call(); //window[apply](); or window[apply].apply(); will work too
- }
- });
- event.preventDefault();
- });
- });
- function addBubble(){
- alert('a');
- }