如何为ajax和http请求使用php代码?

时间:2015-12-12 22:23:47

标签: php ajax

我有一些包含一些php代码的类和方法。现在我想将这些PHP代码用于ajax和http请求。怎么样?

我应该两次编写所有PHP代码吗?一次用于ajax请求,一次用于http请求?

这是我目前的结构:

/********************************************** Search.php ****/

... // some html codes

<div id="content">

<?php

if(!empty($_SERVER["HTTP_X_REQUESTED_WITH"]) && 
   strtolower($_SERVER["HTTP_X_REQUESTED_WITH"]) === "xmlhttprequest")
{ 
  $type = true; // true means ajax request
} else {
  $type = false; // false means http request
}

  $obj = new classname;
  $results = obj->func($type);
  echo $results;

?>

</div>

... // some html codes



/********************************************** Classname.php ****/

class classname {

  public function func($type){
    $arr = ('key1'=>'some', 'kay2'=>'data');

    if ($type){
      echo json_encode($arr);
    } else {
      return $arr;
    }

  }

}

现在我想知道,这是标准的吗?实际上我也希望将它用于来自移动应用程序(类似API)的请求。我认为上面的代码有两个问题:

  1. 会有很多IF语句只是用于检测请求类型(在每种方法中)
  2. ajax和http请求只有一个文件(class.php)。当我通过移动设备发送ajax请求时,它会处理一些根本不需要它们的代码
  3. 嗯,有什么意义我需要知道吗?

3 个答案:

答案 0 :(得分:1)

这更多是关于软件的设计,然后简化它。通常,您将拥有一个包含您使用的类的结构,并将PHP文件用于响应类型。

例如
你可以拥有这些文件:classes.php,index.php和ajax.php。

这些类将包含可以显示为JSON或HTML的通用类。

PS:
Simplified意味着:

/********************************************** Search.php ****/

... // some html codes

<div id="content">

<?php

  $obj = new classname;
  $results = obj->func($_SERVER["HTTP_X_REQUESTED_WITH"]);
  echo $results;

?>

</div>

... // some html codes



/********************************************** Classname.php ****/

class classname {

  public function func($type){
    $arr = ('key1'=>'some', 'kay2'=>'data');

    if(!empty($type["HTTP_X_REQUESTED_WITH"]) && 
   strtolower($type["HTTP_X_REQUESTED_WITH"]) === "xmlhttprequest"){
      echo json_encode($arr);
    } else {
      return $arr;
    }

  }

}

答案 1 :(得分:1)

您可以编写单个代码,而仅使用partials来加载AJAX数据。我们使用AJAX的主要原因是最小化数据传输。您不应该在AJAX调用中加载整页HTML,尽管它完全有效。

我建议根据我的经验,有一个文件:

<?php
    if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
        /* special ajax here */
        die(json_encode($data));
    } else { ?>

Regular Flow of Content

<?php } ?>

答案 2 :(得分:1)

我首先会做所有业务逻辑,调用你的类,而不依赖于你是否在ajax调用中。当所有准备好输出时,请进行切换:

<强>的search.php:

<?php
    // first do your business logic without view dependency.
    $obj = new classname;
    $results = obj->func(); // no type is passed.

    if(!empty($_SERVER["HTTP_X_REQUESTED_WITH"]) && 
       strtolower($_SERVER["HTTP_X_REQUESTED_WITH"]) === "xmlhttprequest")
    { 
        // ajax request
        echo json_encode($results);
        exit();
    } 
    // http request
?>
... // some html codes
<div id="content">
    <?=$results?>
</div>
... // some html codes

<强> Classname.php:

<?php
class classname {
  public function func(){
    $arr = ('key1'=>'some', 'kay2'=>'data');
    return $arr;
  }
}
?>