php - 如何在单个入口点发送 ajax
问题描述
有这样的问题,需要在加载视图时发送ajax,但是因为创建了输入的统一点,所以不能指定地址。
一些代码:.htaccess:
AddDefaultCharset UTF-8
Options -Indexes
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]
编写了最简单的路由器,它扫描 $_SERVER ['REQUEST_URI'] 并将其切割成几部分。示例代码发布太长,但我会尝试。/app/core/route.php:
<?php
class Route
{
static function start()
{
$controller_name = 'Main';
$action_name = 'index';
$params = null;
$routes = explode('/', $_SERVER['REQUEST_URI']);
if (!empty($routes[2])){ #
$controller_name = $routes[2];
}
if (!empty($routes[3])){
$action_name = $routes[3];
}
if (!empty(array_slice($routes, 4))) {
$params = array_slice($routes, 4);
}
$model_name = 'Model_' . $controller_name;
$controller_name = 'Controller_' . $controller_name;
$action_name = 'action_' . $action_name;
$model_file = mb_strtolower($model_name) . '.php';
$model_path = "app/models/" . $model_file;
if (file_exists($model_path)) {
include "app/models/" . $model_file;
}
$controller_file = mb_strtolower($controller_name) . ".php";
$controller_path = "app/controller/" . $controller_file;
if (file_exists($controller_path)) {
include "app/controller/" . $controller_file;
} else {
Route::ErrorPage404();
}
if (!class_exists($controller_name)) {
Route::ErrorPage404();
} else {
$controller = new $controller_name;
$action = $action_name;
if (method_exists($controller, $action)) {
if ($controller_name != 'Controller_auth') {
if ($controller->check_login_status()) {
if ($params) {
$controller->$action($params);
} else {
$controller->$action();
}
}
} else {
if ($params) {
$controller->$action($params);
} else {
$controller->$action();
}
}
} else {
Route::ErrorPage404();
}
}
}
function ErrorPage404()
{
$host = 'http://' . $_SERVER['HTTP_HOST'] . '/super_crm/';
header('HTTP/1.1 404 Not Found');
header("Status: 404 Not Found");
header('Location:' . $host . '404'); #редирект на контроллер 404
}
function AuthPage()
{
$host = 'http://' . $_SERVER['HTTP_HOST'] . '/super_crm/main';
header('HTTP/1.1 404 Not Found');
header("Status: 404 Not Found");
header('Location:' . $host);
}
}
处理和结果输出在控制器app/controller/controller_join.php中:
function action_test() {
$ajax_test = $this->model->ajax_test();
$ajax_json = json_encode($ajax_test, JSON_UNESCAPED_UNICODE);
//header('Content-Type: application/json; charset=UTF8');
return ($ajax_json);
}
也试图以这种方式得出:
function action_test() {
$ajax_test = $this->model->ajax_test();
$this->view->generate('join/_search_result.php', 'join/_search_result.php',
array(
'title' => 'Заявки на подключения!',
'objects' => $ajax_test
)
);
}
结果,当你直接进入页面时,join/test 会生成正确的 json(json 中的转换是在视图中进行的)
AJAX本身需要在这个请求中发送,问题的本质是如何正确指定请求将发送到的地址(如果指定/join/test(get error 404),我希望有必要正确的.htaccess,这样就可以直接向我的index.php文件发送请求,虽然对此不太熟悉,我想了解是否有更简单的解决方案,我将不胜感激。
jQuery 本身:
$(document).ready(function() {
$('#main_table').DataTable( {
"processing": true,
"serverSide": true,
"ajax": "join/test"
} );
} );
解决方案
推荐阅读
- react-native - Haste 模块地图中不存在模块`child_process`
- c++ - 使用枚举 vs 变量,存储非类型模板参数值。(在 Int2Type 内
模板) - python - 散景中的等高线图
- emacs - 文本导出正在扩展路径的一部分 - 如何抑制这一点?
- sql-server - 在数据库表中显示每个月的最后一个工作日。(工作日不包括周六、周日)
- android - Android序列(跳过方法)
- google-kubernetes-engine - 如何在 Java 应用程序中从 GKE 登录到 Stackdriver
- r - ggplot2,来自第 1 列的标签,但来自第 2 列的值是自动实现的,而不是手动实现的?
- python-3.x - Solidworks 宏实现不适用于 Python
- c# - 将数据加载到 RAM 以在所有表单中使用