Как выполнить вставку MySQL через jQuery / Ajax в Zend Framework - PullRequest
2 голосов
/ 10 февраля 2011

Краткое краткое описание:

Я нахожусь в процессе создания программы для рисования, которая использует элемент холста HTML 5.Я хотел бы, чтобы пользователь мог сохранять содержимое своего рисунка в любой момент времени.Пока что я могу создать массив, который содержит содержимое чертежа с помощью JavaScript.

Что я хотел бы сделать:

Что я пытаюсь сделатьсделать сейчас - создать кнопку «Сохранить», после нажатия которой массив вставляется в таблицу MySQL.В настоящее время я пытаюсь научить себя, как это сделать через jQuery / Ajax в Zend Framework.Единственное, в чем я не уверен, так это как заставить 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>

Фрагмент кода из моего контроллера: 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.";
    }
    }

Из вышеприведенного кода:Я знаю, что я все об этом ошибаюсь, и мне было интересно, может ли кто-нибудь там помочь мне в этом процессе.Заранее большое спасибо.

Редактировать:

Я внес изменения, предложенные Судолом, вот последняя копия кода, который я получил для работы:

Мой обновленный контроллер CreateDrawingController.php :

<code>    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 '
';}}

Обновленный фрагмент кода в моем 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. Я оставил скобки в части getRequest следующего оператора if:

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

  2. Я забылвключить макеты, и я включил их с помощью Zend's CLI Tools для Windows, используя следующую команду:

    zf enable layout

Спасибо за помощь sudol!Надеюсь, это поможет кому-то еще.:)

1 Ответ

2 голосов
/ 11 февраля 2011

Ты довольно близко,

используя ваш вызов 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.";
    }
}

Примечание: Я не тестировал этот код! Но я думаю, что это правильно. Вы очень близки в первую очередь.

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...