1

我有两个下拉列表,即问答。起初答案下拉列表是空的,用户选择一个问题后,它会将 question_id 传递给控制器​​运行一个函数来获取答案。控制器得到结果后,会传递给对应的视图。现在如何将结果传递给索引视图?

索引视图:

$("#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>';
       }
4

3 回答 3

1

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

success: function(response){
    //do what u wana do
    $('#yourSelectID').html(response);
}
于 2012-07-20T08:57:33.567 回答
1

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

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

这里的解决方案是使用上下文切换。现在不会详细介绍,因为我相信该链接包含足够的信息,如果您有任何问题,请告诉我。

于 2012-07-27T08:13:15.283 回答
0

使用 ajax 你应该总是使用这两个东西

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

在 ajax 共鸣中

success: function(response){

    $('#id_answer').html(response);
}
于 2012-07-20T09:04:46.930 回答