Значение выбора назначается из раскрывающегося списка и передается в javascript myFunction в качестве параметра. И я хочу создать таблицу, используя данные в базе данных. Код работает нормально и создает таблицу, когда я не передаю параметр. Но я хочу передать параметр. Помогите мне, ребята.
Это мой код в поле зрения
function myFunction($choice) {
document.getElementById("demo").innerHTML = "You selected: " + $choice;
$.get("{{ URL::action('CombinationController@readData',array('choice'=> 'choice'))}}", function (data) {
$.each(data, function (i, value) {
var tr = $("<tr/>");
tr.append($("<td/>", {
text: value.student_id
})).append($("<td/>", {
text: value.initials + " " + value.last_name
})).append($("<input />", {
type: 'checkbox', value: value.student_id
}))
$('#student').append(tr);
});
});
}
Это код в Route
Route::get('readData/{choice}','CombinationController@readData');
Это мой CombinationController
public function readData($choice)
{
if ($choice==0) {
$StuPS1ch1 = CombinationSubmits::join('student', 'combination_submits.student_id', '=', 'student.student_id')
->select('combination_submits.student_id', 'student.initials', 'student.last_name')
->where(['choice_1' => 'PS1'])
->get();
}
return $StuPS1ch1;
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Когда ваше представление визуализировано, php уже завершил компиляцию всего кода. К тому времени, когда ваша функция javascript запускается (на стороне клиента), ваш URL-адрес (сгенерированный PHP на стороне сервера) уже является строкой, поэтому вы не получите желаемого эффекта.
Если вы попытаетесь сгенерировать URL-адрес с динамическими сегментами, например:
URL::action('CombinationController@readData',array('choice'=> $choice))
Вы, вероятно, получите сообщение об ошибке, потому что фасад URL-адреса PHP требует, чтобы переменная $ choice была доступна при рендеринге.
Я предлагаю заменить переменную на строку запроса, чтобы вы могли сделать что-то вроде этого:
function myFunction(choice) {
document.getElementById("demo").innerHTML = "You selected: " + choice;
$.get("{{ URL::action('CombinationController@readData') }}?choice = " + choice, function (data) {
$.each(data, function (i, value) {
var tr = $("<tr/>");
tr.append($("<td/>", {
text: value.student_id
})).append($("<td/>", {
text: value.initials + " " + value.last_name
})).append($("<input />", {
type: 'checkbox', value: value.student_id
}));
$('#student').append(tr);
});
});
}
Также вам придется сменить контроллер:
public function readData()
{
$choice = \Request::input('choice');
if ($choice==0) {
$StuPS1ch1 = CombinationSubmits::join('student', 'combination_submits.student_id', '=', 'student.student_id')
->select('combination_submits.student_id', 'student.initials', 'student.last_name')
->where(['choice_1' => 'PS1'])
->get();
}
return $StuPS1ch1;
}
Артур Самаркос, в вашем ответе ошибка в фигурных скобках. Я не смог ее определить. Можете ли вы исправить. Спасибо.
Они изменили код в соответствии с вашим кодом. bt его не работает. не могли бы вы объяснить все изменения, которые я должен сделать в коде
Что именно не работает. Расскажите подробнее.
Значение для выбора присваивается при выборе раскрывающегося списка. Хотя это значение печатается в демонстрации, таблица не создается. следует ли мне изменить код в контроллере, а также файл маршрута.
@wow Да, теперь вы не получите $ choice в качестве сегмента url, но вы можете использовать фасад запроса.
это в angular js или angular 5