2017-06-11 142 views
0

我正在通过AJAX调用PHP的一个站点,现在AJAX使用POST从PHP获取一个回显的字符串,然后在开关中比较它,然后执行所需的操作。下面从PHP调用JS函数

function submitPHP(dataForPHP){ 
    //Runs ajax request 
    $.ajax({ 
     type : "POST", 
     url : 'initPHP.php', 
     dataType : 'text', 
     data : dataForPHP, 
     success : function(data){ 
      //Checks echoed data from PHP 
      switch(data){ 
       case "LOGIN_ACCEPTED": 
        loggedInFunction(); 
        break; 
       case "LOGIN_FAILED": 
        loggedInFailedFunction(); 
        break; 
      } 
     } 
    }); 
} 

我想,如果没有为PHP返回什么功能的方式代码示例(如“loggedInFunction();”)我想调用,而不是一个字符串,然后我不得不比较然后调用函数?我可以改变AJAX来使用JSON,而不是它。

我一直在寻找其他类似的问题在这里堆栈上大多数人想回声一个完整的功能,这是不是我想要做的。

在此先感谢!

+0

我认为你想要做的是JSONP:https://stackoverflow.com/a/3840118/4949918 – Axnyff

+0

我认为[this](https://stackoverflow.com/questions/912596/how-to-turn-a-string-into-a-javascript-function-call)可能就是你正在寻找的东西。我觉得有点奇怪,你想要紧密结合后端和前端,但这是可能的。最后一句忠告:不要沿着'eval'路线走。有龙。 –

+4

你不想做什么,你想做什么。甚至不知道JS中要调用哪个函数,也不是说JS的buisness告诉PHP这些函数使用。保持它们分开,并使用一个接口来实现两端之间的通信,否则最终必须调试PHP,因为您已经在JS中更改了某些内容,反之亦然 – Thomas

回答

0

我会这样做。

  1. 使用HTTPS进行登录,HTTP现在真的不安全;
  2. 创建具有所有允许方法(动作)一个控制器对象;
  3. 致电动作控制器

控制器的想法是在几个层次上方便:

  • 安全性:如果一个方法是不是在控制器你不能调用它,所以它是知道的方式可以调用什么,什么是绝对不可能调用的;
  • 凝聚力:方法是彼此相邻,更容易维护;
  • 封装:如果有任何状态,它可以容易地在该对象的上下文中保存。

这是一个例子:

loginController = { 
    "acceptAction": function() { 
    }, 
    "failAction": function() { 
    } 
}; 

现在,您甚至可以从AJAX处理的方法。说服务器告诉你你必须做什么。 A 动词可以这么说,如acceptfail。你可以这样做:

"success": function (data) { 
    loginController[data + "Action"](); 
} 

就是这样。

顺便说一句:这只是非常基本的MVC模式。老人,但金杰:)