Я хочу сделать викторину и изменить форму на следующий идентификатор с помощью ajax, с переменной next_question_id, он будет отображать форму со следующим идентификатором, я изменяю значение переменной с помощью Response :: json, но она превращает страницу в пустую с помощью jsonданные вместо отображения формы со следующим идентификатором.
моя форма:
<div class="jumbotron" id="jumbotron{{$question->id}}"
@if($question->id != $current_question_id)
style="display: none;"
@endif
>
<p>Question#{{$question->id}}</p>
<p>{{$question->question}}</p>
{!! Form::open(['action'=>['QuizDataController@postSaveQuestionResult',$categoryquiz->id],'method'=>'post','id'=>'frm'.$question->id]) !!}
<div id="answer-radio{{$question->id}}">
<div class="btn-group" data-toggle="buttons">
<label>
<input type="radio" name="option" value="1">{{$question->option1}}
</label><br>
<label>
<input type="radio" name="option" value="2">{{$question->option2}}
</label><br>
<label>
<input type="radio" name="option" value="3">{{$question->option3}}
</label><br>
<label>
<input type="radio" name="option" value="4">{{$question->option4}}
</label><br>
</div>
</div>
{!!Form::input('hidden','question_id',$question->id)!!}
{!!Form::input('hidden','time_taken'.$question->id,null,['id'=>'time_taken'.$question->id])!!}
{!!Form::token()!!}
@if($question->id == $last_question_id)
{!!Form::submit('Last',['class'=>'btn btn-info'])!!}
@else
{!!Form::submit('Next',['class'=>'btn btn-info'])!!}
@endif
{!!Form::close()!!}
</div>
Мой скрипт для показа следующей формы:
$(function(){
console.log({{$question->id}});
$('#frm{!!$question->id!!}').on('submit',function(e){
e.preventDefault();
var form = $(this);
var $formAction= form.attr('action');
var $userAnswer = $('input[name=option]:checked',$('#frm{{$question->id}}')).val();
$.post($formAction,$(this).serialize(),function(data){
$('#jumbotron{{$question->id}}').hide();
$('#jumbotron'+data.next_question_id+'').show();
});
});
});
Мой контроллер для сохранения ответа по идентификатору:
public function postSaveQuestionResult($id,Request $req){
$categoryquiz = JenisQuiz::find($id);
$question = Question::find($req->get('question_id'));
if($req->get('option')!=null){
// dd($categoryquiz->duration);
$duration = $categoryquiz->duration*60;
$time_taken =((int)$req->get('time_taken'.$question->id));
$time_per_question = $duration - $time_taken;
// dd($time_per_question);
Answer::create([
'user_id'=>Auth::user()->id,
'question_id'=>$req->get('question_id'),
'jenis_quiz_id' => $id,
'user_answer' => $req->get('option'),
'question' => $question->question,
'option1' => $question->option1,
'option2' => $question->option2,
'option3' => $question->option3,
'option4' => $question->option4,
'time_taken' => $time_per_question
]);
}
$next_question_id = $categoryquiz->questions()->where('id','>',$req->get('question_id'))->min('id');
// dd($next_question_id);
// if($next_question_id != null) {
// return \Response::json(['next_question_id'=>$next_question_id]);
// }
if($next_question_id != null){
return Response::json(['next_question_id'=>$next_question_id]);
}
return redirect()->route('result',[$id]);
}
Мой контроллер для отображения викторины:
public function getStartQuiz($id){
session()->forget('next_question_id');
$categoryquiz = JenisQuiz::find($id);
// dd($categoryquiz);
$questions = $categoryquiz->questions()->get();
// dd($questions->count());
$first_question_id = $categoryquiz->questions()->min('id');
// print_r($first_question_id);
$last_question_id = $categoryquiz->questions()->max('id');
// dd($first_question_id,$last_question_id);
$duration = $categoryquiz->duration;
// dd(session('next_question_id'));
if(session('next_question_id')){
$current_question_id = session('next_question_id');
}
else{
$current_question_id = $first_question_id;
session(['next_question_id'=>$current_question_id]);
}
return view('user.pages.showquiz', compact('categoryquiz', 'questions', 'current_question_id', 'first_question_id', 'last_question_id', 'duration'));
}
Ожидается: показать следующий джумботрон и скрыть предыдущий результат джумботрона: пустая страница и показать данные json так, как это:
{"next_question_id":3}
это успешно скрыть и показать следующий идентификатор вопроса только один раз, и когда я нажимаю следующий, снова не удалось, он должен все еще быть на странице викторины, но застрял в маршруте postSaveQuestionResult, я думаю, что проблема в том, когда он идет в ответ:: json (['next_question_id' => $ next_question_id]); извините за мой плохой английский, спасибо