为什么我的ajax函数不适用于yii2

时间:2016-09-21 13:16:33

标签: php jquery ajax yii2 chart.js

你好***请问如何在yii2中使用ajax函数

事实上,我正在研究这个框架的产品(yii2),而不是直接使用它,但我认为这是相同的原则。我想绘制图表(chartJs或googleChart或d3 ......无论如何)

所以在后端区域的索引文件中(xx / xx / xx / dashboard / index.php)我想将ajax请求发送到另一个php文件(简单和逻辑)

这个与index(xx / xx / xx / dashboard)放在同一个文件夹中,但没有任何反应! :(

我注意到如果我在框架文件夹之外测试我的两个文件(indexAjax和phpDB),我会得到一个不错的结果 但是一旦它在框架文件中,它们将不再起作用:(

我的代码如下: 1 /我的索引文件的一部分

<canvas id="mycanvas" width="400" height="400"></canvas>
<script>
$(function()
{
$.ajax({
		url: "chartData.php",
		type:'POST',
		data:{'trigger':'trigger'},
		success: function(data) {
			
			alert(data);
			console.log(data);
			var idTab = [];
			var resultatTab = [];

			for(var i in data) {
				idTab.push("data " + data[i].id);
				resultatTab.push(data[i].resultat);
			}

			var chartdata = {
				labels: idTab,
				datasets : [
					{
						label: 'Player Score',
						backgroundColor: 'deepskyblue',
						borderColor: 'dodgerblue',
						hoverBackgroundColor: 'orange',
						hoverBorderColor: 'yellow',
						data: resultatTab
					}
				]
			};

			var ctx = $("#mycanvas");

			var doughnutGraph = new Chart(ctx, {
				type: 'doughnut',
				data: chartdata,
				options:{responsive:false}
			});
		},
		error: function(data) {
			alert(JSON.stringify(data));
			console.log(data);
		}
	});
}); // fin jQuery
</script>

2 /第二个文件(php)

<?php
if (isset($_POST['trigger']))
{
//setting header to json
header('Content-Type: application/json');

//database
define('DB_HOST', '127.0.0.1');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'lab');

//get connection
$mysqli = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);

if(!$mysqli){
	die("Connection failed: " . $mysqli->error);
}

//query to get data from the table
$query = sprintf("SELECT * FROM score");

//execute query
$result = $mysqli->query($query);

//loop through the returned data
$data = array();
foreach ($result as $row) {
	$data[] = $row;
}

//free memory associated with result
$result->close();

//close connection
$mysqli->close();

//now print the data
print json_encode($data);
 
}
注意:我还必须说我不尊重MVC的原则 我把所有东西放在同一个文件夹中...但我认为它仍然是一个选择

非常感谢

2 个答案:

答案 0 :(得分:1)

我认为你必须看看yii2中的路由是如何工作的 http://www.yiiframework.com/doc-2.0/guide-structure-overview.html 或者在这里 http://www.yiiframework.com/doc-2.0/guide-start-hello.html

你无法直接调用php文件..

例如,在javascript中:

$.get('/site/user-messages', function (data, status) {

                        if (status !== 'success') {
                                console.log('ERROR: '+ status);
                                return;
                        }
                        allData = JSON.parse(data);

});

此处网站控制器用户消息操作 在这种情况下,在urlManager

中启用了prettyUrl模式

答案 1 :(得分:1)

以适当的操作添加charData.php文件的内容,例如:inside siteController.php

 public function actionChartData() {
    your code 
    .........

    return $this->render('your_related_view', [
         /* your  vars */
        'my_var' => $my_var,
    ]);
}

使用

调用动作i ajax
$.ajax({
url: <?php echo   \yii\helpers\Url::to(['/site/chart-data']) ?>,
type:'POST',
data:{'trigger':'trigger'},
success: function(data) {
        ........