mysql - 如何在 Zend Framework 中通过 jQuery/Ajax 执行 MySQL 插入

标签 mysql ajax zend-framework

简要背景介绍:

我正在创建一个使用 HTML 5 canvas 元素的绘图程序。我想让用户能够在任何给定时间保存他们绘图的内容。到目前为止,我已经能够通过 javascript 创建一个包含绘图内容的数组。

我想做什么:

我现在要做的是创建一个“保存”按钮,按下该按钮后,数组将插入到 MySQL 表中。我目前正在尝试自学如何通过 Zend Framework 中的 jQuery/Ajax 执行此操作。我唯一不确定的是如何让 Zend Controller 接收来自 Ajax 请求的数据。

这是我目前所拥有的:

index.phtml 中的代码片段:

<button type="submit" id="saveButton" name="saveButton">Save</button>
<script type"text/javascript">
    $(document).ready(function()
    {           
        $("#saveButton").click(function()
        {
            $.ajax(
            {
                url: "/CableDesign/public/create-drawing/save",
                data: drawingArray,
                type: "POST",
                success: function(response){ alert('Success!'); }
            });
        });
    });
</script>

来 self 的 Controller 的代码片段:CreateDrawingController.php

  public function indexAction()
{
        if($this->_request->isXmlHttpRequest())
    {
        // This is where I would retrieve my array from the Ajax request and insert its contents into my database table.
        $drawingArray = $this->getParam('drawingContents');
        $drawingModel = new Application_Model_DbTable_DrawingModel();
        $boolInsert = $drawingModel->insertContents($drawingArray);

        if ($boolInsert)
            $this->view->message = "Successful save!";
        else
            $this->view->message = "Fail to save your drawing.";
    }
    }

从上面提到的代码,我知道我做这一切都是错误的,我想知道是否有人可以帮助我完成这个过程。非常感谢您。

编辑:

我做了 sudol 建议的更改,这是我开始工作的代码的最终副本:

我更新的 Controller CreateDrawingController.php:

    class CreateDrawingController extends Zend_Controller_Action
{

    public function init()
    {

    }

    public function indexAction()
    {

    }

    public function saveAction()
    {
        if($this->getRequest()->isXmlHttpRequest())
        {
            //$drawingArray = $this->getRequest()->getParams();
            $drawingArray = $this->getRequest()->getParam('drawingArray');
            $drawingModel = new Application_Model_DbTable_DrawingModel;
            $boolInsert = $drawingModel->insertContents($drawingArray);

            if ($boolInsert)
                $this->view->message = "Successful save!";
            else
                $this->view->message = "Fail to save your drawing.";
        }
    }

    private function printArray($array)
    {
        echo '<pre>';
        print_r($array);
        echo '</pre>';
    }
}

我的 index.phtml

中更新的代码片段
<script type"text/javascript">
    $(document).ready(function()
    {           
        $("#saveButton").click(function()
        {
            $.ajax(
            {
                url: "/CableDesign/public/create-drawing/save",
                data: { drawingArray : drawingArray },
                type: "POST",
                success: function(response){ alert('Success!'); }
            });
        });
    });
</script>

内部服务器 500 错误是由两件事引起的:

  1. 我在以下 if 语句的 getRequest 部分省略了括号:

    if ($this->getRequest()->isXmlHttpRequest())

  2. 我忘记启用布局,我使用以下命令通过 Zend 的 Windows CLI 工具启用它们:

    zf 启用布局

感谢 sudol 的所有帮助!希望这可以帮助其他人。 :)

最佳答案

你很接近,

使用您的 ajax 调用:

$.ajax(
    {
        url: "/public/create-drawing/save",
        data: drawingContents,
        type: "POST",
        success: function(response){
        alert('Success!');
    }
});

您需要在 CreateDrawingController 中调用一个名为 saveAction 的新 Action,而不是 indexAction。您可以通过执行 $this->getRequest()->getParams() 检索数据,然后在您执行操作时将其保存。像这样的东西:

public function saveAction()
{
    if($this->getRequest()->isXmlHttpRequest())
    {
        $drawingArray = $this->getRequest()->getParams();
        $drawingModel = new Application_Model_DbTable_DrawingModel();
        $boolInsert = $drawingModel->insertContents($drawingArray);

        if ($boolInsert)
            $this->view->message = "Successful save!";
        else
            $this->view->message = "Fail to save your drawing.";
    }
}

注意:我没有测试这段代码!但我认为这是正确的。首先,你们非常亲密。

希望这有帮助:)

关于mysql - 如何在 Zend Framework 中通过 jQuery/Ajax 执行 MySQL 插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4961276/

相关文章:

mysql - 是否可以在 Azure 网站上创建使用数据库的 Django 应用程序?

php - 为什么我的文件没有被加载?

javascript - AJAX with Rails - 缺少模板

php - Zend框架的Remember Me功能

php - Zend Framework - 数据库表单例

php - 使用PHP上传文件添加路径到MySQL

javascript - 阻止通过 URL 下载

mysql - 选择链接表中具有计数的行

javascript - Flexslider 添加幻灯片(Ajax 内容)

php - Zend Framework 中的重复引导