0

我是 jquery 和 zend 的新手,试图使用 $.getJSON 在前端和后端之间进行通信。

所以这就是我所做的:

在 /mycontroller/index.phtml 的标题标签中,我有 js 代码:

 <script src="/js/jquery.js"></script>
<script type="text/javascript">
    $(document).ready(function(){
    //  alert("js");
        $("#loadQuestions").submit(function(){
            var formData = $(this).serialize();
            console.log(formData);
            $.getJSON('http://xxx.com/mycontroller/process', formData, processData).error('ouch');
            function processData(data){
                //alert(data);
                console.log(data);
            }
            return false;
        }); // end submit
    }); // end ready
</script>

在body标签中,有一个简单的形式:

<form action="http://xxx.com/mycontroller/process" method="post" id="loadQuestions">
    <input type="hidden" name="page" value="100">
    <input type="submit" name="button" id="button" value="Submit" >
</form>

在 processAction() 中,有简单的代码:

$arr = array('pageNumber'=>200);
    echo json_encode($arr);
    exit;

我想拥有的是,在我点击提交后,应该收集表单数据(我可以在 chrome 控制台中看到),但是在我看到 formData 之后,控制台中又没有显示任何内容(我应该看到数据从服务器传递但我没有)。

有谁知道我应该怎么做才能解决它?

4

2 回答 2

0

您可以在控制器中使用 AjaxContext 操作助手。

我是这样设置的。

    public function preDispatch()
    {
        $this->_ajaxContentSwitch = $this->_helper->getHelper('AjaxContext');
        $this->_ajaxContentSwitch->addActionContext('process', 'json')
                                 ->initContext();
   }

并在你的过程中行动。

public function processAction()
{
    if ($this->_helper->ajaxContext()->getCurrentContext() == 'json') { 
                $this->view->array = array('pageNumber'=>200);
    } else {
        // Not called via ajax do redirect or something here
    }
}

此外,您的 JQuery 脚本中的 url 应该是“http://xxx.com/mycontroller/process/format/json”才能正常工作。

上面的 processAction 将返回一个名为 array 的 json 字符串,其中包含您的数组。

我希望这有帮助。

加里

于 2012-08-07T09:41:41.410 回答
0

我认为您遇到了问题,因为您正在尝试从控制器进行打印。在 Zend 中,您必须在视图文件中执行此操作。

所以......在 processAction 你应该做类似......

$this->view->data = $arr;

然后在视图文件 process.phtml 你需要...

if($this->data)
    echo json_encode($this->data);
于 2012-08-07T00:20:10.063 回答