Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ajax+;Yii2中的控制器动作_Javascript_Php_Jquery_Ajax_Yii2 - Fatal编程技术网

Javascript Ajax+;Yii2中的控制器动作

Javascript Ajax+;Yii2中的控制器动作,javascript,php,jquery,ajax,yii2,Javascript,Php,Jquery,Ajax,Yii2,我是编程新手,我尝试在用户输入数据并单击submit按钮时调用函数。我使用的是Yii2,我不熟悉Ajax。我尝试开发一个函数,但没有调用我的控制器操作 下面是我正在尝试的示例代码: views/index.php: <script> function myFunction() { $.ajax({ url: '<?php echo Yii::$app->request->baseUrl. '/supermark

我是编程新手,我尝试在用户输入数据并单击submit按钮时调用函数。我使用的是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()
{
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);
       }
  });
$.ajax({
url:“”,
键入:“post”,
数据:{
searchname:$(“#searchname”).val(),
searchby:$(“#searchby”).val(),
_csrf:'
},
成功:功能(数据){
console.log(data.search);
}
});

您必须将_csrftokin作为参数传递

_csrf: yii.getCsrfToken()

或者您可以禁用csrf valdation

获取csrf参数的正确方法如下:

data[yii.getCsrfParam()] = yii.getCsrfToken()

使用开发工具或firebug检查输出。有错误或错误代码吗?似乎没有错误,但当我点击Search时,什么也没有发生。我添加了您的代码,但问题是当我单击Search时,什么也没有发生,即使在调试时!您是否在JavaScript函数中,需要调用myFunction。我正在调用我的函数onclick:Search您需要验证它I抱歉,我是新手,如何验证它?
data[yii.getCsrfParam()] = yii.getCsrfToken()