Php 我的AJAX帖子以一个文件的HTML作为响应

Php 我的AJAX帖子以一个文件的HTML作为响应,php,ajax,Php,Ajax,我的问题是一个复杂的问题,我会在问题的最后分析它。我已经创建了一个站点,并将其设置为/view中的每个.php文件在/controller中都应该有一个同名的.php。通过这种方式,我有两个home.php、两个login.php等。我创建了一个AJAX调用,以便将一些数据传输到php index.php <?php session_start(); $all_url = explode('?', $_SERVER['REQUEST_URI']); $url = explode('/',

我的问题是一个复杂的问题,我会在问题的最后分析它。我已经创建了一个站点,并将其设置为/view中的每个.php文件在/controller中都应该有一个同名的.php。通过这种方式,我有两个home.php、两个login.php等。我创建了一个AJAX调用,以便将一些数据传输到php

index.php

<?php

session_start();
$all_url = explode('?', $_SERVER['REQUEST_URI']);
$url = explode('/', $all_url[0]);

//Homepage
if (empty($url[1])) {
$url[1] = 'frontpage';
}

//DB connect
$config = array(
'host' => 'xxx', //CHANGE THIS, DB SERVER
'user' => 'xxx', //CHANGE THIS, DB USER
'password' => 'xxx', //CHANGE THIS, DB PASSWORD
'database' => 'xxx' //CHANGE THIS, DB NAME
);
$DB = new PDO('mysql:host=' . $config['host'] . ';dbname=' . $config['database'], $config['user'], $config['password']);
$DB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$DB->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$DB->exec("SET names utf8");

if (file_exists('controller/' . $url[1] . '.php')) {

$gtpl = 'main';
$restricted = array('cart');

if (!isset($_SESSION['firstVisit']) && $url[1]!='frontpage') {
    $_SESSION['firstVisit'] = false; //ensures we never enter this clause again
    require 'controller/frontpage.php';
}else if (empty($_SESSION['uid']) && in_array($url[1], $restricted)) {
    //not logged in, but trying to access restricted page.
    require 'controller/login.php';
}else{
    require 'controller/' . $url[1] . '.php';
}

require 'view/' . $gtpl . '.php';
} else {
echo 'ERROR - File not found!!!';

}
<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <meta name="description" content="">
    media="screen"/>

    "My styles"

</head>
<body>
    <div class="container">

        <?php require 'view/frontend/'.$tpl.'.php';?>

    </div>

    "My .js scripts"

</body>

由于我的index.php,我不需要url:'home.php',但这会产生一个问题:我无法针对特定的文件,例如位于/controller中的home.php。每当我写url:'home.php'或url:'controller/home'时,我都会在index.php的末尾得到错误-“'error-File not found!!!”;”。当我现在将url保留在main.js中时,我会得到home.php的整个HTML代码的响应,该代码位于view和main.php中。我似乎不明白这是怎么发生的。有办法修复吗?

您可以覆盖
index.php
中的功能。例如,在ajax请求中发送另一个参数,如,
custom=true

....
url: 'home.php?custom=true',
....
index.php中

.....
if (!isset($_SESSION['firstVisit']) && $url[1]!='frontpage') {
    $_SESSION['firstVisit'] = false; //ensures we never enter this clause again
    require 'controller/frontpage.php';
}else if (empty($_SESSION['uid']) && in_array($url[1], $restricted)) {
    //not logged in, but trying to access restricted page.
    require 'controller/login.php';
}else{
    require 'controller/' . $url[1] . '.php';
}

$path = (empty($_GET["custom"])) ? 'view/' . $gtpl . '.php' : $gtpl;

require $path;

..........

上述代码需要在ajax url中指定的确切url。

您可以在ajax请求中使用自定义参数,并在
index.php
中覆盖当前功能。更多细节请参见我的答案
.....
if (!isset($_SESSION['firstVisit']) && $url[1]!='frontpage') {
    $_SESSION['firstVisit'] = false; //ensures we never enter this clause again
    require 'controller/frontpage.php';
}else if (empty($_SESSION['uid']) && in_array($url[1], $restricted)) {
    //not logged in, but trying to access restricted page.
    require 'controller/login.php';
}else{
    require 'controller/' . $url[1] . '.php';
}

$path = (empty($_GET["custom"])) ? 'view/' . $gtpl . '.php' : $gtpl;

require $path;

..........