2012-07-20 57 views
1

我有两个问题和答案的下拉列表。 首先答案下拉列表为空,在用户选择一个问题后,它会将question_id传递给控制器​​以运行函数来获得答案。控制器得到结果后,它将传递到相应的视图。现在我怎样才能将结果传递给索引视图?如何在Zend中传递视图之间的数据列表?

索引视图:

$("#id_question").change(function() { 
var data = $("#id_question").val(); 
var dataToSend = {question: data} 
var href= '<?php echo $this->baseUrl('admin/comment/checkanswer'); ?>'; 

    $.ajax({ type: "POST", 
     url: href, 
     data: dataToSend, 
     success: function(response){ 

       //do what u wana do 
     } 
     }); 
    });` 

控制器:

public function checkanswerAction() 
{ 
    $this->_helper->layout->disableLayout(); 

    $question_id = $this->getRequest()->getParam('question'); 

    $answer_model = new Admin_Model_DbTable_Answer(); 
$answer = $answer_model->getAnswersByQuestionId($question_id); 

$this->view->answer = $answer; 
    } 

的checkanswer.phtml:

foreach ($this->answer as $key => $value) 
    { 
     echo '<option value="'.trim($value['id_answer']).'">'. trim($value['answer_text']) .'</option>'; 
     } 
+0

你到底想要做什么?你在这里做了什么是对的。有任何错误? – 2012-07-20 09:00:07

+0

当前结果将显示在checkanswer.phtml中...但我希望它显示在index.phtml中... – Vivian 2012-07-22 07:43:42

+0

正确的代码应该是这样的, checkanswer.phtml ''option value =“0”style = “border-bottom:solid 1px #ccc!important;”><?php echo $ this-> translate('select_answer',$ controller_name);?> <?php foreach($ this-> answer as $ key'> $ value) { echo''; } ?>' – Vivian 2012-07-30 07:07:09

回答

1

应显示在checkanswer.phtml内容将影响到您的javascript var response。所以,如果你想在你的页面来显示这一点,你必须做出这样的事情:

success: function(response){ 
    //do what u wana do 
    $('#yourSelectID').html(response); 
} 
0

使用Ajax你应该总是用这两样东西

$this->_helper->layout()->disableLayout(); 
    $this->_helper->viewRenderer->setNoRender(true); // this you have not used. 

而在阿贾克斯resonse

success: function(response){ 

    $('#id_answer').html(response); 
} 
+0

你不必总是禁用视图和布局。上下文切换做的工作(和JSON上下文切换是该死的真棒的事情!):) – Gediminas 2012-07-20 18:27:23

+0

@Gediminas谢谢你提高我的知识。所以它意味着'$ this - > _ helper-> layout() - > disableLayout();'会正常工作。你能告诉我什么时候这两个都是必需的吗? – 2012-07-23 03:01:53

+0

如果输出中的标记完全不同于大多数,那么您不想使用(disableLayout()),但不值得创建单独的布局,因为它是唯一需要它的情况。不会经常发生,因为大多数时间页面共享通用的材料等。在这种情况下禁用视图(setNoRender())会破坏它,因为不会输出任何内容。一般来说,在生产环境中无法想到一个案例。可能永远不会。因为如果你开始回应行动,坏事会发生。 – Gediminas 2012-07-27 08:03:20

1

你的动作有一个错误:$this->getRequest()->getParam('question');。它获取使用GET传递的参数,但是您使用POST传递参数。所以你应该使用$this->getRequest()->getPost('question');。如果您添加HTML像其他人建议它应该工作。如果没有,请使用firebug或chrome开发者工具来查看服务器返回的内容以及服务器是否返回错误的输出,或者使用JS解析错误。

但是这种方法不会一直工作(输出格式化的HTML),因为它只是不灵活。例如,您希望在其他应用程序(甚至不同平台,如Android)中使用此ajax端点,或者您希望在打印之前修改客户端中的数据等。

此处的解决方案是使用context switching 。现在不会涉及很多细节,因为我相信链接中包含足够的信息,如果您有任何问题,请告诉我。

相关问题