Как вызвать функцию JavaScript из возврата ajax - PullRequest
1 голос
/ 06 ноября 2010

У меня есть вызов $ .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 возвращает имя функции (test), но не запускает функцию. Как это исправить?

Ответы [ 2 ]

6 голосов
/ 06 ноября 2010

НЕ ИСПОЛЬЗУЙТЕ 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');
2 голосов
/ 06 ноября 2010

Я думаю, что лучше перенести вашу функцию в объект здесь, чтобы вы могли увидеть, существует она или нет:

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');
      });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...