我目前正在使用ajax数据请求来处理前端表单。在我的代码中,我在php块中具有此功能,当选择选择框中的一个类别以显示子类别时,该区块会部分显示。
function onChangeCat()
{
$this['subs'] = Cat::whereHas('parent', function ($query) use($cats){
$query->where('cats','=', $cats );
})->pluck('cat_title', 'id');
我正在尝试将其连接到路线,以便当用户单击类别时,相关的子类别将显示在第二个选择框中。
这是我的路由文件,其中类别选择框的#id为参数
Route::get('ajax/{cats}' , function () {
//
return json_encode();
});
我如何连接php块中的代码和路由以使其工作,以便仅显示类别的相关子类别?
答案 0 :(得分:1)
要将当前元素值传递给Ajax Handler
,您需要给它name - attribute
并添加data-request="onChange"
处理程序。所有其他内容将由October CMS Ajax Api
<select name="country" data-request="onChange">
<option id="1">A</option>
<option id="2">B</option>
<option id="3">C</option>
<option id="4">D</option>
</select>
在您的Ajax处理程序中
function onChange() {
$id = post('country'); // as we name it `country` for select
// ^ - this will be your selected value [id]
return ['data' => 'some data'];
}
其他过程数据 [如果需要它的话] 否则,您可以只使用data-
request-update="calcresult: '#result'"
并返回Html Markup
<script>
function myFunction(data) {
console.log(data)
}
</script>
<select
name="first"
data-request="onChange"
data-request-success="myFunction(data)">
...
</select>
在success-full request
上,它将调用myFunction
并返回数据,在我们的情况下,它将是{'data':'some data'}
JSON对象,无论您从Ajax-Handler
返回什么。
如有疑问,请发表评论。
答案 1 :(得分:0)
十月CMS有一个$this->params()
方法,可以调用该方法从当前请求中获取url参数(请参阅here)。您的代码应如下所示(未试用):
Route::get('ajax/{cats}' , function () {
$results = Cat::whereHas('parent', function ($query) {
$query->where('cats', $this->param('cats'));
})->pluck('cat_title', 'id')->all();
return $results;
}