Javascript 在CodeIgniter中正确使用$.post、$.ajax或ajax调用PHP脚本
我不是一个框架迷,但我被要求使用它,因为我正在做一个其他人以后可能会编辑的项目 我正在使用Javascript 在CodeIgniter中正确使用$.post、$.ajax或ajax调用PHP脚本,javascript,php,jquery,ajax,codeigniter,Javascript,Php,Jquery,Ajax,Codeigniter,我不是一个框架迷,但我被要求使用它,因为我正在做一个其他人以后可能会编辑的项目 我正在使用CodeIgniter框架(我对它有点陌生) 我正在使用jquery$.post(url,function(){})异步调用一个登录解析器,该解析器位于名为php parser的文件夹下的根目录中,我意识到这个文件夹没有使用任何CodeIgniter的现成类。我决定将文件夹php parser移动到application/libraries中,但当我试图使用jQuery调用它引用完整路径/applicati
CodeIgniter
框架(我对它有点陌生)
我正在使用jquery
$.post(url,function(){})
异步调用一个登录解析器,该解析器位于名为php parser
的文件夹下的根目录中,我意识到这个文件夹没有使用任何CodeIgniter的
现成类。我决定将文件夹php parser
移动到application/libraries
中,但当我试图使用jQuery
调用它引用完整路径/application/libraries/php parser/the script.php
时,它返回一个403禁止的错误
你认为我能做什么?有些人说我可以让脚本成为一个控制器,但这里是怎么回事,它是一个弹出模式登录页面。如果您单击login/register(登录/注册)按钮,任何页面都会弹出一个模式,我如何为其制作控制器和模型(如果我要遵循该过程)
添加:我将模式内容放在所有页面的页脚末尾,如何为这种模式创建控制器?任何帮助 在处理MVC时(至少按照您使用MVC的方式),您有三个部分:
- 模型-在本例中,这是与数据库交互的代码
- 视图-设置要发送回浏览器的数据格式的代码
- 控制器——将两者连接在一起的代码,其中可能包含一些业务逻辑
浏览器(和其他客户端)仅通过URL与web服务器交互 因此,您绝对需要设置一个控制器来处理来自浏览器的请求
如果您以快速而肮脏的方式执行此操作,那么您的控制器将从POST请求中获取用户名和密码,并使用模型对照数据库进行检查,然后将“Success!”或“Fail!”喷射到视图中(这可能是最好将JSON格式返回到浏览器的内容)
如果您正在查看,则视图将具有以下逻辑: 浏览器是否在accept标头中显式包含JSON 如果是这样的话,返回一点JSON,说“成功”或“失败”(或真/假,或任何对您有意义的东西) 不是吗?然后返回一个“抱歉,您登录失败!”HTML文档或重定向回他们来自的页面(这样它将以登录状态重新加载) 这样,如果JavaScript失败,使用Ajax JavaScript逐步增强的纯HTML表单仍将正常工作。(注意:你必须这样写!)
如果您在Ajax选项中说
dataType:“JSON”
,jQuery将自动包含一个JSON友好的接受头。是的,您需要将文件放在libraries文件夹中(如果类与codeigniter分开或在多个控制器之间共享,如果不是一个模型就足够了),然后为它创建一个控制器
class Ajax_Controller extends CI_Controller
{
public $statusCode = 200;
public $response = array();
public function __construct()
{
parent::__construct();
if(!$this->is_ajax_request()){
return; // direct access not allowed
}
$this->response = array(
'error' => false,
'text' => "",
'fields' => array()
);
}
public function sendResponse()
{
return $this->output
->set_status_header($this->statusCode)
->set_content_type('application/json')
->set_output(json_encode($this->response));
}
}
class Auth extends Ajax_Controller
{
public function __construct()
{
parent::__construct();
$this->load->library('php-parser/script', 'authentication');
}
public function login()
{
if(!$this->form_validation->run()){
$this->response = array(
'error' => true,
'text' => "The form has some errors",
'fields' => array(
'username' => form_error('username'),
'password' => form_error('password')
)
);
return $this->sendResponse();
}
$username= $this->input->post('username');
$password= $this->input->post('password');
if(!$this->authentication->login($username, $password)){
$this->response = array(
'error' => true,
'text' => "incorrect username/password combination",
'fields' => array()
);
$this->statusCode = 401;
return $this->sendResponse();
}
}
}
如果你打算使用这个框架,听起来你需要阅读更多关于它的内容。对于初学者来说,这篇关于codeigniter中控制器的文档:它解释了制作一个简单hello world方法的过程,你可以在此基础上进行扩展,以使控制器功能符合你需要的登录解析器的方式投票否决我并不能解决我的问题@skrilled我已经阅读了它,我还在阅读它,但我似乎没有找到一个与modals相关的工作,这就是我来这里的原因。如果你真的阅读了文档,甚至可以尝试一步一步地遵循它的教程,你会知道如何在屏幕上打印“Hello World”。接下来就是打印你想要的任何东西。打印一个JSON字符串{“loggedIn”:true}查看客户端看到的与DB控制器交互的模型验证/模型是什么loaded@skrilled新的codeigniter文档在这两个版本中的位置意味着双方都应该进行验证,减少服务器上的负载,这就意味着登录不是一个完整的页面,可以拥有其他人所拥有的常规控制器和模型(据我所知)。模式登录表单就在每个页面上加载的
下方,这样无论您在哪个页面上,都可以单击登录,然后弹出该窗口,我如何使该模式调用上的登录
按钮`成为PHP
脚本,或使用控制器和模型?“其他人使用的常规控制器和模型”-错误。我在回答中解释了这一点。视图负责确定发送到浏览器的数据的格式。如果您不需要完整的HTML文档,则视图不应发送。模型和控制器是不相关的(因为它们用于获取数据、组织数据并将其传递给视图,并且成功登录的数据不会在完整的HTML页面和一块JSON之间发生变化)。“如何使该模式调用上的登录按钮`成为PHP脚本“-将其放入表单中,然后按正常方式提交表单。然后,如果不想加载整个新页面,可以使用JavaScript逐步增强它(以执行Ajax)。现在有很多Ajax教程,写一个新的已经超出了SO答案的范围,更不用说评论了。好的,这是我问题的重点。我可能不太擅长提问,也许这就是你没有理解我的原因。如果点击按钮,它将调用php脚本,其中?控制器、模型、库文件或我自己的 无法使用codeigniter类的根目录中的php parser
文件夹?有两个类