Ajax + Yii2 中的控制器动作
Ajax + Controller Action in Yii2
我是编程新手,我正在尝试在用户输入数据并单击提交按钮时调用一个函数。我正在使用 Yii2,我不熟悉 Ajax。我尝试开发一个功能,但我的控制器操作没有被调用。
这是我正在尝试的示例代码:
views/index.php:
<script>
function myFunction()
{
$.ajax({
url: '<?php echo Yii::$app->request->baseUrl. '/supermarkets/sample' ?>',
type: 'post',
data: {searchname: $("#searchname").val() , searchby:$("#searchby").val()},
success: function (data) {
alert(data);
}
});
}
</script>
<?php
use yii\helpers\Html;
use yii\widgets\LinkPager;
?>
<h1>Supermarkets</h1>
<ul>
<select id="searchby">
<option value="" disabled="disabled" selected="selected">Search by</option>
<option value="Name">Name</option>
<option value="Location">Location</option>
</select>
<input type="text" value ="" name="searchname", id="searchname">
<button onclick="myFunction()">Search</button>
<h3> </h3>
控制器:
public function actionSample(){
echo "ok";
}
我的问题是当我点击“搜索”按钮时没有任何反应,当我尝试调试它时,调试器没有运行任何代码!
这是示例,您可以根据需要进行修改
public function actionSample()
{
if (Yii::$app->request->isAjax) {
$data = Yii::$app->request->post();
$searchname= explode(":", $data['searchname']);
$searchby= explode(":", $data['searchby']);
$searchname= $searchname[0];
$searchby= $searchby[0];
$search = // your logic;
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return [
'search' => $search,
'code' => 100,
];
}
}
如果这会成功,您将在 Ajax 成功块中获得数据。请参阅浏览器控制台。
$.ajax({
url: '<?php echo Yii::$app->request->baseUrl. '/supermarkets/sample' ?>',
type: 'post',
data: {
searchname: $("#searchname").val() ,
searchby:$("#searchby").val() ,
_csrf : '<?=Yii::$app->request->getCsrfToken()?>'
},
success: function (data) {
console.log(data.search);
}
});
你必须将 csrf 令牌作为参数传递
_csrf: yii.getCsrfToken()
或者您可以禁用 csrf 验证
获取 CSRF 参数的正确方法是这样的:
data[yii.getCsrfParam()] = yii.getCsrfToken()
我是编程新手,我正在尝试在用户输入数据并单击提交按钮时调用一个函数。我正在使用 Yii2,我不熟悉 Ajax。我尝试开发一个功能,但我的控制器操作没有被调用。
这是我正在尝试的示例代码:
views/index.php:
<script>
function myFunction()
{
$.ajax({
url: '<?php echo Yii::$app->request->baseUrl. '/supermarkets/sample' ?>',
type: 'post',
data: {searchname: $("#searchname").val() , searchby:$("#searchby").val()},
success: function (data) {
alert(data);
}
});
}
</script>
<?php
use yii\helpers\Html;
use yii\widgets\LinkPager;
?>
<h1>Supermarkets</h1>
<ul>
<select id="searchby">
<option value="" disabled="disabled" selected="selected">Search by</option>
<option value="Name">Name</option>
<option value="Location">Location</option>
</select>
<input type="text" value ="" name="searchname", id="searchname">
<button onclick="myFunction()">Search</button>
<h3> </h3>
控制器:
public function actionSample(){
echo "ok";
}
我的问题是当我点击“搜索”按钮时没有任何反应,当我尝试调试它时,调试器没有运行任何代码!
这是示例,您可以根据需要进行修改
public function actionSample()
{
if (Yii::$app->request->isAjax) {
$data = Yii::$app->request->post();
$searchname= explode(":", $data['searchname']);
$searchby= explode(":", $data['searchby']);
$searchname= $searchname[0];
$searchby= $searchby[0];
$search = // your logic;
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return [
'search' => $search,
'code' => 100,
];
}
}
如果这会成功,您将在 Ajax 成功块中获得数据。请参阅浏览器控制台。
$.ajax({
url: '<?php echo Yii::$app->request->baseUrl. '/supermarkets/sample' ?>',
type: 'post',
data: {
searchname: $("#searchname").val() ,
searchby:$("#searchby").val() ,
_csrf : '<?=Yii::$app->request->getCsrfToken()?>'
},
success: function (data) {
console.log(data.search);
}
});
你必须将 csrf 令牌作为参数传递
_csrf: yii.getCsrfToken()
或者您可以禁用 csrf 验证
获取 CSRF 参数的正确方法是这样的:
data[yii.getCsrfParam()] = yii.getCsrfToken()