我有两个下拉列表,即问答。 首先,答案下拉列表为空,在用户选择问题后,它会将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>';
}
答案 0 :(得分:1)
checkanswer.phtml
中应显示的内容会受到javascript var response
的影响。因此,如果您想在页面中显示此内容,则必须执行以下操作:
success: function(response){
//do what u wana do
$('#yourSelectID').html(response);
}
答案 1 :(得分:1)
您的行动中存在错误:$this->getRequest()->getParam('question');
。它获取一个使用GET传递的参数,但是您使用POST传递。所以你应该使用$this->getRequest()->getPost('question');
。如果你像其他人建议的那样添加HTML应该可行。如果没有,请使用firebug或chrome开发人员工具查看服务器返回的内容以及服务器是否返回错误的输出,或者使用JS解析它时存在错误。
但是这种方法不会一直存在(输出格式化的HTML),因为它只是不灵活。例如,您希望在其他应用程序(或者甚至是不同的平台,例如Android)中使用此ajax端点,或者您希望在打印之前修改客户端中的数据等。
此处的解决方案是使用context switching。现在不会详细介绍很多细节因为我认为该链接包含足够的信息,如果您有任何问题,请告诉我。
答案 2 :(得分:0)
使用ajax你应该总是使用这两件事
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true); // this you have not used.
在ajax的共鸣中
success: function(response){
$('#id_answer').html(response);
}