如何:PHP/Javascript通信

如何:PHP/Javascript通信,javascript,php,ajax,Javascript,Php,Ajax,当我发展我的思维时,我不断地提出一些我自己无法回答的问题。这是因为项目应该帮助其他人创建他们通常会创建的内容,但速度更快,即尽可能自动化。有鉴于此,我的问题是如何实现PHP后端 这就是我要做的。我喜欢创建客户端JavaScript可以调用的函数。通常,我通过POST和JSON发送一个名为action的变量,该变量包含我正在调用的函数的名称以及我希望发送的任何参数。PHP代码如下所示: if(issset($_POST['action'])) { //function foo(arg1,a

当我发展我的思维时,我不断地提出一些我自己无法回答的问题。这是因为项目应该帮助其他人创建他们通常会创建的内容,但速度更快,即尽可能自动化。有鉴于此,我的问题是如何实现PHP后端

这就是我要做的。我喜欢创建客户端JavaScript可以调用的函数。通常,我通过POST和JSON发送一个名为action的变量,该变量包含我正在调用的函数的名称以及我希望发送的任何参数。PHP代码如下所示:

if(issset($_POST['action'])) {
    //function foo(arg1,arg2)
    if($_POST['action'] == 'foo') {
        $arg1 = $_POST['arg1'];
        $arg2 = $_POST['arg2'];
        //do stuff
    }
}
我仍然可以引用我在PHP中创建的其他实际函数,但我发现这是一种很好的组织一切的方法,并且很容易在JavaScript和PHP中实现

你是做什么的

编辑1:好的,根据这个问题的前两个答案,我认为我没有很好地解释我自己

我问的是如何创建PHP后端。这个想法是让AJAX客户机用JavaScript或其他语言编写,这无关紧要,然后它将使用POST或GET数据调用后端PHP。基于这些数据,您的后端将执行它需要执行的操作,可能只是更新数据库,甚至可能返回信息,再说一次:没关系


现在的问题是:你如何告诉它该做什么?您通过POST/GET发送什么,以及如何在后端解释它?

我做了一些非常类似的事情。您需要的是一个JSON对象来传递回javascript。完成PHP后,可以调用将对象传递回前端。从那以后,您可以用Javascript对其进行更多操作,或者根据需要对其进行格式化

这里有关于类似问题的更多信息:


编辑:在阅读了你的编辑之后,我认为你所做的一切都很好。当您从Javascript发送AJAX请求时,请包含一个变量,如action或任何您想要的。从那里,您可以通过case和switch语句检查操作是什么。

我做了一些非常类似的事情。您需要的是一个JSON对象来传递回javascript。完成PHP后,可以调用将对象传递回前端。从那以后,您可以用Javascript对其进行更多操作,或者根据需要对其进行格式化

这里有关于类似问题的更多信息:


编辑:在阅读了你的编辑之后,我认为你所做的一切都很好。当您从Javascript发送AJAX请求时,请包含一个变量,如action或任何您想要的。从那里,您可以通过case和switch语句检查操作是什么。

我通常将php函数作为普通函数编写

fn1(arg1, arg2){
 //do stuff here
}
fn2(arg3){
 //do stuff here
}
我在一个名为action的变量中传递函数名。然后这样做:

foreach($_POST as $key => $value) 
$$key = $value;
指定与参数同名的创建变量

然后使用开关盒调用相应的函数,如下所示:

switch($action){
 case 'fn1':fn1(arg1,arg2);
 break;
 case 'fn2':fn2(arg3);
 break;
}
这就是你要找的吗


编辑:您可以使用来开发一个Web服务,如果您在SOAP请求中指定了函数名,那么该函数将自动执行,而不必编写开关大小写,或者如果。我在Java中使用过它,但不确定它在PHP中究竟是如何工作的。

我通常将PHP函数作为普通函数编写

fn1(arg1, arg2){
 //do stuff here
}
fn2(arg3){
 //do stuff here
}
我在一个名为action的变量中传递函数名。然后这样做:

foreach($_POST as $key => $value) 
$$key = $value;
指定与参数同名的创建变量

然后使用开关盒调用相应的函数,如下所示:

switch($action){
 case 'fn1':fn1(arg1,arg2);
 break;
 case 'fn2':fn2(arg3);
 break;
}
这就是你要找的吗

编辑:您可以使用来开发一个Web服务,如果您在SOAP请求中指定了函数名,那么该函数将自动执行,而不必编写开关大小写,或者如果。我在Java中使用过它,但不确定它在PHP中到底是如何工作的

现在的问题是:你怎么说 那该怎么办呢?你寄什么 POST/GET以及您如何解释它 在你的后端

选择你自己的惯例。例如,在JSON数据中使用一个表示动作的动作值,然后添加更多参数。如果您想了解其他网站的功能,可以使用Firefox中的Firebug扩展来监视各种网站的Ajax消息

例如,Json POST数据可以是:

{
    action: "create",
    fields: {
       firstname: "John",
       lastname: "Doe",
       age: 32
    }
}
您可以使用新创建记录的ID对其进行答复

要删除记录,请执行以下操作:

{
    action: "delete",
    keys: {
        id: 4654564
    }
}
等等

在php ajax处理程序中,您可以使用简单的开关:

$jsonData = Services_Json::decode($_POST['json']);
switch ($jsonData->action)
{
    case "save":
        if (validate_json_data($jsonData->fields))
        {
            UsersPeer::create($jsonData->fields);
        }
        break;
    case "delete":
        /* etc */
}

// return a json reply with 
$jsonReply = new stdClass;
$jsonReply->status = "ok";
$jsonReply->statusMessage = "Record succesfully created";
echo Services_Json::encode($jsonReply);
exit;
Javascript,比如原型Ajax。如果状态不正常,请求响应程序函数将在一个专门创建的DIV中输出错误消息,等等

现在的问题是:你怎么说 那该怎么办呢?你寄什么 POST/GET以及您如何解释它 在你的后端

选择你自己的惯例。例如,在JSON数据中使用一个表示动作的动作值,然后添加更多参数。如果您想知道什么,可以在Firefox中使用Firebug扩展来监视各种网站的Ajax消息 其他网站也有

例如,Json POST数据可以是:

{
    action: "create",
    fields: {
       firstname: "John",
       lastname: "Doe",
       age: 32
    }
}
您可以使用新创建记录的ID对其进行答复

要删除记录,请执行以下操作:

{
    action: "delete",
    keys: {
        id: 4654564
    }
}
等等

在php ajax处理程序中,您可以使用简单的开关:

$jsonData = Services_Json::decode($_POST['json']);
switch ($jsonData->action)
{
    case "save":
        if (validate_json_data($jsonData->fields))
        {
            UsersPeer::create($jsonData->fields);
        }
        break;
    case "delete":
        /* etc */
}

// return a json reply with 
$jsonReply = new stdClass;
$jsonReply->status = "ok";
$jsonReply->statusMessage = "Record succesfully created";
echo Services_Json::encode($jsonReply);
exit;

Javascript,比如原型Ajax。如果状态不正常,请求响应程序函数将在一个专门创建的DIV中输出错误消息,等等。

您需要组织函数吗?这叫做“课堂”

/// todo: add error processing
$name=$_GET['action'];
$args=json_decode($_GET['args']); /// or just subarray, doesn't matter

/// 'Action' is constant here but in reality you will need more then one class for this
/// because you will want modules in your framework
if(method_exists('Action',$name))
    call_user_func_array(array('Action',$name),$args);
else { /* incorrect parameters processing */ }

/// Ajax-available functions are here
class Action
{
    public static function action1()
    {
        echo 'action1';
    }
    public static function action2()
    {
        echo 'action2';
    }
}

你需要组织活动吗?这叫做“课堂”

/// todo: add error processing
$name=$_GET['action'];
$args=json_decode($_GET['args']); /// or just subarray, doesn't matter

/// 'Action' is constant here but in reality you will need more then one class for this
/// because you will want modules in your framework
if(method_exists('Action',$name))
    call_user_func_array(array('Action',$name),$args);
else { /* incorrect parameters processing */ }

/// Ajax-available functions are here
class Action
{
    public static function action1()
    {
        echo 'action1';
    }
    public static function action2()
    {
        echo 'action2';
    }
}

我使用一个首页控制器来处理我的路由。如果设置mod rewrite,您可以拥有非常干净的端点,其中url的第一段引用控制器类,随后的段引用内部的方法,后面是传递给该方法的参数


我使用一个头版控制器来处理我的路由。如果设置mod rewrite,您可以拥有非常干净的端点,其中url的第一段引用控制器类,随后的段引用内部的方法,后面是传递给该方法的参数


我将所有数据发送到一个大GET阵列中的后端

actionpage.php?action=post¶meters[parameter1]=value1¶meters[parameter2]=value2

如果您打印\u r$\u GET,在PHP端您将看到:

array(
    "action" => "create",
    "parameters" => array("parameter1"=>"value1","parameter2"=>"value2")
)
这样做的目的是允许循环遍历参数。你可以在pap里说

 if($_GET['action'] == 'create'){
      foreach($_GET['parameters'] as $key=>$value){ //something

我将所有数据发送到一个大型GET阵列中的后端

actionpage.php?action=post¶meters[parameter1]=value1¶meters[parameter2]=value2

如果您打印\u r$\u GET,在PHP端您将看到:

array(
    "action" => "create",
    "parameters" => array("parameter1"=>"value1","parameter2"=>"value2")
)
这样做的目的是允许循环遍历参数。你可以在pap里说

 if($_GET['action'] == 'create'){
      foreach($_GET['parameters'] as $key=>$value){ //something

此网站将回答您的所有ajax问题。我发现它真的很有用。

此网站将回答您所有的ajax问题。我发现它真的很有用。

我也这么做,但我的目标是javascript帖子到URL的映射,而不是JSON,我尝试尽可能多地发送简单的HTTP帖子内容。通过这种方式,您将能够使用来自非Ajax触发器的相同代码。就像表单提交一样,我也会这样做,但我的目标是javascript帖子到URL的映射,而不是JSON,我会尽可能多地发送简单的HTTP帖子。通过这种方式,您将能够使用来自非Ajax触发器的相同代码。与表单提交-1类似:在不进行任何验证的情况下信任用户输入和处理register\u globals之类的内容都是严重的安全问题。不要以任何方式将其用于生产代码。-1:在没有任何验证的情况下信任用户输入和处理register_globals的内容都是严重的安全问题。不要以任何方式将其用于生产代码。