1

質問と回答である2つのドロップダウンリストがあります。最初は回答のドロップダウン リストは空です。ユーザーが質問を選択すると、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

アクションにバグがあります:$this->getRequest()->getParam('question');。GETを使用して渡されたパラメーターを取得しますが、POSTを使用して渡しています。したがって、を使用する必要があります$this->getRequest()->getPost('question');。他の人が提案したようにHTMLを追加すると、機能するはずです。そうでない場合は、firebugまたはchrome開発ツールを使用して、サーバーから返されたものと、サーバーから間違った出力が返されたかどうか、またはJSでの解析にバグがあるかどうかを確認します。

ただし、このアプローチは柔軟性がないため、常に機能するわけではありません(フォーマットされたHTMLを出力する)。たとえば、このajaxエンドポイントを他のアプリケーション(またはAndroidなどの別のプラットフォーム)で使用したい場合や、印刷する前にクライアント側でデータを変更したい場合などです。

ここでの解決策は、コンテキストスイッチングを使用することです。リンクには十分な情報が含まれていると思いますので、ここでは詳しく説明しません。ご不明な点がありましたらお知らせください。

于 2012-07-27T08:13:15.283 に答える
1

表示されるコンテンツはcheckanswer.phtml、javascript var に影響されますresponse。したがって、これをページに表示したい場合は、次のようにする必要があります。

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

ajaxでは、常にこれら2つを使用する必要があります

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

そして ajax resonse で

success: function(response){

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