laravel: ajax на запрос нет ответа - PullRequest
0 голосов
/ 27 мая 2020

Я новичок в laravel, и я несколько часов застревал с этой проблемой - "" Этот запрос не имеет доступных данных ответа"". Я исследую некоторые связанные проблемы, но все еще не смог найти решения.

У меня есть поиск с автозаполнением, который отображает список учащихся в теге <a>, который имеет функцию onclick для отображения модального окна с подробностями выбранного студента. Поиск с автозаполнением работает правильно, когда я щелкнул тег <a>, модальное окно всплывает, но не отображает сведения о выбранном ученике.

Я использую ajax для получения сведений об учащемся и отображения их в модальном окне. Я проверил статус сети, и он говорит: « Этот запрос не имеет доступных данных ответа ». Как это исправить? любая помощь приветствуется.

Так выглядит мой поиск с автозаполнением, затем пользователь щелкает по выбранному учащемуся, чтобы открыть модальное окно и отобразить сведения о нем.

This is what my autocomplete search looks like

//My route
Route::group(['middleware' => 'auth'], function(){
Route::get('violation_entry', ['as' => 'violation_entry', 'uses' => 'ViolationEntryController@index']);
Route::get('violation_entry/fetch', ['as' => 'violation_entry.fetch', 'uses' => 'ViolationEntryController@fetch']);
Route::get('violation_entry/form', ['as' => 'violation_entry.form', 'uses' => 'ViolationEntryController@form']);});


//(My ViolationEntryController@fetch Controller) 
//this is the searched result that triggers the display of modal when clicked using onclick="violationForm()" 
function foreach($data as $student){
    $output .= '<div class="row">
                    <div class="col-lg-8 col-md-12 col-sm-12" >
                        <a href="#" onclick="violationForm()" id="'.$student->student_id.'" class="violationFormStudent list-group-item list-group-item-action d-flex justify-content-start text-decoration-none">
                            <div class="student_image_div mr-3">
                                <img class="student_img" src="../paper/img/students_images/default_student_image.jpg" alt="Student Image">
                            </div>
                            <div class="student_details_div">
                                <p class="student_name_txt">'.$student->last_name.', '.$student->first_name.'</p>
                                <p class="student_number_txt text-dark">'.$student->student_id.' <span class="text-muted"> | '.$student->course.'-'.$student->section.' | '.$student->school.' </span></p>
                            </div>
                        </a>
                    </div>
                </div>
            '; 
}


//(index.blade.php view) 
//this is the ajax request to fetch student's details and show modal
    <script>
        function violationForm(){
           var query = $(this).attr('id');
           $.ajax({
               url:"{{ route('violation_entry.form') }}",
               method:"GET",
               data:{query:query},
                   success:function(data){
                       $('#violationEntryForm').modal('show');
                       $('#studentDetails').html(data);  
                   }
           });
        };
    </script>


//(My ViolationEntryController@form Controller) 
//get ajax request and fetch student's information
function form(Request $request)
{
    if($request->get('query')){
        $query = $request->get('query');
        $student = Students::where('student_id', $query)->first();

        $output ='
            <div class="student_img_div_modal mr-4">
                <img class="student_img_modal" src="../paper/img/students_images/default_student_image.jpg" alt="">
            </div>
            <div class="student_details_div_modal">
                <p class="student_id_txt_modal">'.$student->student_id.'</p>
                <p class="student_name_txt_modal">'.$student->first_name.' '.$student->last_name.'</p>
                <p class="student_details_txt_modal">'.$student->course.'-'.$student->section.' | '.$student->school.'</p>
            </div>

        ';
        echo $output;
    }
}

Это ожидаемый результат для моего модального

Expected Output for Modal

И это окончательный результат, где он не Не отображает информацию об учащемся

The Final Output

Ниже приведены скриншоты моего состояния сети

Network status

Network Status

Почему отображается "" Этот запрос не имеет доступных данных ответа""?

Ответы [ 3 ]

0 голосов
/ 28 мая 2020

Я не уверен, что происходит, но во-первых, вы используете метод Symfony ->get(), который предназначен для ввода (запросы POST). Вам нужно использовать $request->query(), чтобы получить строку запроса. Однако в вашем комментарии выше, если вы вставили все это, похоже, что ваша строка запроса не прикрепляется. Вам также нужен метод возврата по умолчанию, что произойдет, если идентификатор не найден. Я бы обернул все это блоком try / catch, но это все, что вы предпочитаете. Добавление оператора else по крайней мере вернуло бы на вашу страницу ошибку, а не ту, которую вы получаете.

0 голосов
/ 28 мая 2020

Причина, по которой Сеть сообщает мне, что «Запрос не содержит данных ответа» , заключается в том, что var query = $(this).attr('id'); на самом деле не получает мой <a id="'.$student->student_id.'">, я пробовал console.log(query); точно так же lewis4u сказал, но возвращает UNDEFINED var. Я нашел альтернативную функцию для получения атрибута моего <a> id по этой ссылке - JavaScript - onClick, чтобы получить идентификатор нажатой кнопки

, поэтому я изменил свою функцию <a> tag onClick() на эту onclick="violationForm(this.id)" и изменил свой сценарий с этого:

 <script>
    function violationForm(){
       var query = $(this).attr('id');
       $.ajax({
           url:"{{ route('violation_entry.form') }}",
           method:"GET",
           data:{query:query},
               success:function(data){
                   $('#violationEntryForm').modal('show');
                   $('#studentDetails').html(data);  
               }
       });
    };
</script>

На это:

<script>
    function violationForm(student_id){
        $.ajax({
            url:"{{ route('violation_entry.form') }}",
            method:"GET",
            data:{student_id:student_id},
                success:function(data){
                    $('#violationEntryForm').modal('show');
                    $('#studentDetails').html(data);
                }
        });
    };
</script>

Теперь его работает должным образом. Спасибо за ваши ответы. Высоко оценен.

0 голосов
/ 27 мая 2020

В вашем контроллере:

return response()->json(['result' => $output]);

В вашем javascript:

function violationForm(){
           var query = $(this).attr('id');
           $.ajax({
               url:"{{ route('violation_entry.form') }}",
               method:"GET",
               data:{query:query},
                   success:function(data){
                       $('#violationEntryForm').modal('show');
                       $('#studentDetails').html(data.result);  
                   }
           });
        };

И имейте в виду, что из-за того, как вы сделали контроллер, вы можете попасть в ситуации где нет ответа!

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