я хочу изменить значение переменной в ajax, но получить пустую страницу с данными JSON - PullRequest
0 голосов
/ 20 июня 2019

Я хочу сделать викторину и изменить форму на следующий идентификатор с помощью 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]); извините за мой плохой английский, спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...