如何从ajax返回调用JavaScript函数

时间:2010-11-06 12:24:50

标签: php javascript ajax json function

我有一个$ .POST调用,返回需要运行的函数的名称,但它不会执行该函数,我不知道为什么。

以下是一个例子:

JS档案:

$(function(){
     $.post('test.php',{event: 'add'},
          function(data){
               data.func(data.msg);
          },'json');

     function test(msg){
          alert(msg);
     }
});

PHP Ajax:

<?php
     switch($_POST['event']){
          case 'add':
               $output['func'] = 'test';
               $output['msg'] = 'This is add message';
               break;
          case 'delete':
               $output['func'] = 'test';
               $output['msg'] = 'This is delete message';
               break;
     }
     echo json_encode($output);
 ?>

我遇到的问题是ajax正在返回函数的名称(测试),但它不会运行该函数,我该如何解决这个问题?

2 个答案:

答案 0 :(得分:6)

不要使用EVAL。

而是使用您想要执行的函数创建一个对象。例如:

var functionTable = {
    test: function (msg) {
        alert(msg);
    }
};

$.post('test.php', { event: 'add' }, function (data) {
    if (functionTable.hasOwnProperty(data.func)) {
        functionTable[data.func](data.msg);
    }
}, 'json');

答案 1 :(得分:2)

我认为最好将你的功能移到一个对象中,这样你就能看出它是否存在:

var possibleFunctions = {
  test: function(val){
    alert(val);
  }
};

$(function(){
     $.post('test.php',{event: 'add'},
          function(data){
              if(possibleFunctions[data.func]){
                  possibleFunctions[data.func](data.msg);
              }
          },'json');
      });
});