Действие dojo.xhrPost и Zend Framework, нет данных POST, не используется форма - PullRequest
0 голосов
/ 23 марта 2010

Я пытаюсь отправить некоторые данные через dojo.xhrPost в действие Zend Controller. Я вижу данные, отправляемые в консоли Firebug. Однако при проверке данных записи массив пуст.

Я не уверен, возможно ли отправить произвольную строку данных через dojo.xhrPost без использования формы. Это, вероятно, очень большая ошибка. В любом случае, я выложу свой код здесь и посмотрю, что вы все думаете.

В моем скрипте макета у меня есть:

<?php

    $sizeurl = $this->baseUrl() . '/account/uisize';

?>

function resizeText(multiplier)
{
    if (document.body.style.fontSize == "")
    {
        document.body.style.fontSize = "1.0em";
    }
    document.body.style.fontSize = parseFloat(document.body.style.fontSize) + (multiplier * 0.1) + "em";
    var size = document.body.style.fontSize;
    var xhrArgs = {
                    url: "<?= $sizeurl; ?>",
                    postData: size,
                    handleAs: "text"
                }
    dojo.xhrPost(xhrArgs);
}

Тогда мое действие:

public function uisizeAction()
{
    $this->_helper->viewRenderer->setNoRender();
    $this->_helper->layout->disableLayout();

    print_r($_POST);
    $request = $this->getRequest();

    if ($request->isXmlHttpRequest())
    {
        $postdata = $request->getPost();
        print_r($postdata);
        if ($postdata)
        {
            $user = new Application_Model_DbTable_User();
            $user->updateSize($postdata);
        }
    }
}

Я почти уверен, что данные публикации из формы - это массив с именами элементов формы в качестве ключей. При просмотре примеров dojo.xhrPost на веб-сайте кампуса dojo (точнее, http://docs.dojocampus.org/dojo/xhrPost) я вижу, что могу просто отправить строку данных. Как получить доступ к этим данным из действия Zend Controller?

Я использую ZF 1.10 и Dojo 1.4.2

Спасибо за вашу помощь!

PS Я постараюсь задать один из связанных вопросов, но я не могу комментировать.

1 Ответ

0 голосов
/ 24 марта 2010

После прочтения о методах http здесь: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

Я подумал, что мне нужно закодировать данные, отправленные способом, который будет преобразован в массив PHP. Итак, вот новый бит JavaScript:

function resizeText(multiplier)
{
    if (document.body.style.fontSize == "")
    {
        document.body.style.fontSize = "1.0em";
    }
    document.body.style.fontSize = parseFloat(document.body.style.fontSize) + (multiplier * 0.1) + "em";
    var rawdata = "uisize="+document.body.style.fontSize;
    var xhrArgs = {
                    url: "<?= $sizeurl; ?>",
                    postData: rawdata,
                    handleAs: "text"
                }
    //Call the asynchronous xhrPost
    dojo.xhrPost(xhrArgs);
}

Разница в том, что я сейчас указываю пару ключей и отправляю ее. При использовании AJAX это может привести к перерасходу форм. Так что теперь мой интерфейс изменен, и размер сохраняется в профиле пользователя. Поэтому следующая страница, которую они запрашивают, будет использовать размер, который они установили. Круто.

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