【问题标题】:pass data from java script to php file in codeigniter将数据从javascript传递到codeigniter中的php文件
【发布时间】:2015-05-21 05:59:36
【问题描述】:

我使用 javascript php 和 mysql 开发了一个事件管理系统。它在纯 php 中完美运行,但现在我需要将其迁移到 codeigniter 中,并且需要一些关于如何在 codeigniter 中将数据从 js 传递到 php 的建议。

我的前端java脚本函数是这样的

// event creating
                dp.onTimeRangeSelected = function (args) {
                    var name = prompt("New event name:", "Event");
                    dp.clearSelection();
                    if (!name) return;
                    var e = new DayPilot.Event({
                        start: args.start,
                        end: args.end,
                        id: DayPilot.guid(),
                        resource: args.resource, //Change to classroom name
                        text: name //Change to event name
                    });
                    dp.events.add(e);

                    args.text = name;

                    DayPilot.request(
                        "backend_create.php", 
                        function(req) { // success
                            var response = eval("(" + req.responseText + ")");
                            if (response && response.result) {
                                dp.message("Created: " + response.message);
                            }
                        },
                        args,
                        function(req) {  // error
                            dp.message("Saving failed");
                        }
                    ); 
                };

处理create函数的php文件是这样的

<?php
require_once '_db.php';

$insert = "INSERT INTO events (name, start, end, resource) VALUES (:name, :start, :end, :resource)";

$stmt = $db->prepare($insert);

$stmt->bindParam(':start', $start);
$stmt->bindParam(':end', $end);
$stmt->bindParam(':name', $name);
$stmt->bindParam(':resource', $resource);

$received = json_decode(file_get_contents('php://input'));

$start = $received->start;
$end = $received->end;
$resource = $received->resource;
$name = $received->text;
$stmt->execute();

class Result {}

$response = new Result();
$response->result = 'OK';
$response->message = 'Created with id: '.$db->lastInsertId();

echo json_encode($response);

?>

现在在迁移到 codeignitor 时,我将 backend_create.php 文件分离到模型和控制器中,它看起来像这样。

控制器部分

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class TimecalCon extends CI_Controller {

    function __construct()
    {
        parent::__construct();
         $this->load->model("Timecal_model");
    }
public function insert()
    {
        $received = json_decode(file_get_contents('php://input'));

        $start = $received->start;
        $end = $received->end;
        $resource = $received->resource;
        $name = $received->text;        
        $this->Timecal_model->InsertDetails($name, $start, $end, $resource);       

    }

模型

<?php   if ( ! defined('BASEPATH')) exit('No direct script access allowed');


class Timecal_model extends CI_Model {

    function __construct()
    {
        // Call the Model constructor
        parent::__construct();
    }
    function InsertDetails($name, $start, $end, $resource)
    {

        $insert = "INSERT INTO events (name, start, end, resource) VALUES (:name, :start, :end, :resource) ";       
        $query = $db->prepare($insert);
        $stmt->bindParam(':start', $start);
        $stmt->bindParam(':end', $end);
        $stmt->bindParam(':name', $name);
        $stmt->bindParam(':resource', $resource);
        $stmt->execute();
        class Result {}
        $response = new Result();
        $response->result = 'OK';
        $response->message = 'Created with id: '.$db->lastInsertId();
        return json_encode($response);
    }

问题是当我更改视图页面中的 javascript 并像这样使用它时

.....
 DayPilot.request(
                        "TimecalCon/insert", .......

功能中断,我无法将事件插入数据库。在这种情况下,我应该如何将数据从 js 传递到控制器?

【问题讨论】:

  • 尝试在“TimecalCon/insert”之前添加 base_url。比如,''
  • 试试 '

标签: javascript php mysql codeigniter


【解决方案1】:

我们可以使用 Ajax 将值从 javascript 发送到控制器。我有一些我的代码可以帮助你。

 function deleteEmp(empid){

        var base_url = '<?php echo site_url(); ?>';
        var r=confirm("Do You Really Want to Delete? ")
        if (r==true)
        {
            objPost= new Object();
            objPost.empid   = empid;
            $.ajax({
                url:"employee_registration/deleteEmp?empid="+empid,
                type:"POST",
                data:objPost,
                beforeSend:function(data){
                },
                error:function(data){
                },
                success:function(data){
                    alert(data);
                    result=JSON.parse(data);
                    alert(result);
                    if(result.status == 'success'){
                        alert('Deleted Successfully ');
                        window.location.reload();
                        return false;

                    }

                }

            });
        }else{
            return false;
        }
    }

如您所见,我已使用 ajax 将 empid 从视图传递到控制器,这将结果返回到变量中。在这种情况下是 json。

【讨论】:

    【解决方案2】:

    试试这个

    DayPilot.request("<?php echo base_url().'TimecalCon/insert';?>",...)
    

    您必须在config文件夹下的“autoload.php”中添加“url”,然后检查正在加载的url是否正确。尝试修改 base_url() 有点像在 url 中添加或删除“index.php”部分。

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-29
      • 2020-10-14
      • 1970-01-01
      • 1970-01-01
      • 2015-04-10
      相关资源
      最近更新 更多