dojo.xhrPost和Zend Framework操作,没有POST数据,没有使用表单

时间:2010-03-23 07:03:35

标签: ajax zend-framework dojo

我正在尝试通过dojo.xhrPost将一些数据发送到Zend Controller Action。我可以在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校园网站上查看dojo.xhrPost示例时(确切地说是http://docs.dojocampus.org/dojo/xhrPost第二个),看起来好像我只能发送一串数据。如何从Zend Controller Action访问此数据?

我正在使用ZF 1.10和Dojo 1.4.2

感谢您的帮助!

PS 我试着询问其中一个相关问题,但我似乎无法发表评论。

1 个答案:

答案 0 :(得分:0)

在这里阅读了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时可能会使表单过度杀伤。所以现在我的UI被调整大小,大小与用户的个人资料一起存储。所以他们要求的下一页将使用他们设置的大小。凉。