Je suis nouveau dans la programmation et j'essaie d'appeler une fonction lorsque l'utilisateur entre des données et clique sur le bouton Soumettre. J'utilise Yii2 et je ne connais pas Ajax. J'ai essayé de développer une fonction, mais mon action de contrôleur n'est pas appelée.
Voici l'exemple de code que j'essaie:
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>
Manette:
public function actionSample(){
echo "ok";
}
Mon problème est que lorsque je clique sur le bouton Rechercher, rien ne se passe et lorsque j'essaie de le déboguer, le débogueur n'exécute aucun code!
C'est un échantillon que vous pouvez modifier selon vos besoins
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,
];
}
}
Si cela réussit, vous obtiendrez des données dans le bloc de réussite Ajax. Voir la console du navigateur.
$.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);
}
});
vous devez passer _csrf tokin comme paramètre
_csrf: yii.getCsrfToken()
ou vous pouvez désactiver la validation csrf
La bonne façon d'obtenir le paramètre CSRF est la suivante:
data[yii.getCsrfParam()] = yii.getCsrfToken()