简要背景:
我正在创建一个使用HTML 5画布元素的绘图程序。我希望用户能够在任何给定的时间保存他们的绘图内容。到目前为止,我能够通过javascript创建一个数组来保存绘图的内容。
我想做的是:
我现在要做的是创建一个“Save”按钮,按下这个按钮,数组就被插入到一个MySQL表中。目前,我正试图通过Zend框架中的jQuery/Ajax自学如何做到这一点。我唯一不确定的是如何让Zend控制器接收来自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>

来自我的控制器的代码片段: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错误是由两个原因引起的:
我在下面if语句的getRequest部分省略了括号:
if ($this->getRequest()->isXmlHttpRequest())
我忘记启用布局,我使用以下命令通过Zend的Windows CLI工具启用了它们:
zf enable layout
谢谢你的帮助!希望这能帮助其他人。:)

最佳答案

你很接近,
使用ajax调用:

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

您将需要在CreateDrawingController中执行名为saveAction的新操作,而不是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框架内通过jQuery/Ajax执行MySQL插入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4961276/

10-15 22:49