CodeIgniter最佳实践:在哪里存储jQuery / Ajax回调脚本?

时间:2016-06-25 13:38:07

标签: php jquery codeigniter callback structure

我正在使用CodeIgniter 3,我会对存储脚本的位置提出一些建议。我想用jQuery调用一个php脚本,它将JSON数据发送到我的Javascript函数。

如何使用CodeIgniter数据库配置文件在此脚本中与我的数据库建立连接?

这是我的jQuery回调结构:

<?php
session_start();
header('Content-Type: text/json');
error_reporting(E_ALL);
ini_set("display_errors", 1);

$callback = array();

echo json_encode($callback);

我已将此脚本存储在我所创建的app/callback文件夹中,但我不知道是否应将其存储在app文件夹之外...您如何构建CodeIgniter的项目?

感谢您的建议:)

2 个答案:

答案 0 :(得分:1)

如果你想从jQuery调用后端函数,你必须使用AJAX。检查文档here。请参阅下面的一个简单示例。

$.ajax({
  method: "POST",
  url: "PATH_TO_YOUR_CONTROLLER_FUNCTION",
  data: { field_name1: "Field value 1", field_name2: "Field value 2" }
}).done(function( msg ) {
    console.log(msg);
});

如果你的视图中有这个脚本(这是一个php文件),你将能够使用php函数来设置路径。例如:

url: "<?php echo base_url('your_controller/your_function')?>" 

数据库连接和所有逻辑都保留在控制器中,并照常实现。

答案 1 :(得分:1)

<强>设置;

application/config/database.php配置数据库连接中 在application/config/autoload.php中确保已启用数据库库

here了解有关数据库设置的更多信息

<强>模型;

在application / models /中创建用于访问数据库的thing_model.php函数。对于此示例public function get_data(),此函数将在调用时生成数据库JSON数据输出

here了解更多信息以查询您的数据库

<强>控制器;

在您的application/controllers/thing.php中创建一个ajax函数;

public function ajax()
    {
        if ($this->session->loggedin && $this->input->is_ajax_request()){
            $action = $this->uri->segment(3);
            if ($action === "pull"){
                $forms = $this->thing_model->get_data();
                //actions here
            }

            if ($action === "test"){
                //actions here
                echo "hello world!";
            }
        } else {
            redirect('/homepage');
        }
    }

发生什么事;

if ($this->session->loggedin && $this->input->is_ajax_request()){ 在这里,您正在检查安全性,并且请求本质上是ajax

$action = $this->uri->segment(3);正在从URI中抓取一个段来进行操作。例如。 http://example.org/controller/ajaxmethod/this_action

如果您的ajax被调用到if ($action === "pull"){

,则

http://example.org/thing/ajax/pull会返回数据

<强> AJAX;

在.js文件中的jquery JSON ajax (在视图的页脚中加载.js文件)

$('#buttonAction').click(function() {
        //Jquery Ajax code here
        $.ajax({
                method: "POST",
                dataType: "json",
                url: global_path + "thing/ajax/pull",
                data: { user_id: "1", data: "ABC" }
              })
                .done(function( data ) {
                   //process your JSON data here
                });
    });

发生什么事;

jquery ajax数据类型see here
url: global_path + "thing/ajax/pull",使用pull操作调用控制器ajax()方法。

备注

在控制器的__construct中,我建议在这里进行一些测试,以确保只为您的函数提供ajax请求,而不是其他用于严格操作和不需要的未知数的请求。

如果适合您的应用程序,您可以将ajax放到另一个控制器上。但这可能会造成安全问题,并带有重复检查等。