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