【问题标题】:retrieve data using AJAX使用 AJAX 检索数据
【发布时间】:2017-07-07 21:11:04
【问题描述】:

我有拖车文件 第一个文件(pie_chart.php)进行多个查询以每周或每天或每月从数据库中选择数据 此数据将通过 json 发送到另一个文件 (test.php) 此文件将检索此 json 数据以使用 google chart api 绘制图表 这是test.php的内容

function pie_chart() {
		
      var jsonData = $.ajax({
          url: "pie_chart.php",
          dataType: "json",
          async: false
          }).responseText;
          
      // Create our data table out of JSON data loaded from server.
 alert(jsonData);
      var data = new google.visualization.DataTable(jsonData);

      // Instantiate and draw our chart, passing in some options.
      var chart = new google.visualization.LineChart(document.getElementById('piechart_div'));
      chart.draw(data, {width: 600, height: 400});
	}
	


</script>

现在的问题是 if 条件后如何告诉 ajax 从 pie_chart.php 获取数据 IE 在 pie_chart.php 中有

<?php
include ("inc/db_settings.php");
if($_POST['tar']=='week')
{$sql="SELECT count(username) as count, date(AcctStartTime) AS date1 FROM radacct where date(AcctStartTime) >= curdate() - INTERVAL DAYOFWEEK(curdate())+30 DAY  AND date(AcctStartTime) < curdate() - INTERVAL DAYOFWEEK(curdate())-3 DAY GROUP BY date1";

#$sql = "SELECT
   
   # `cnumber`AS `count`,`date` 
#FROM `chart` WHERE date >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY
#AND date < curdate() - INTERVAL DAYOFWEEK(curdate())-1 DAY";
#$sql="SELECT COUNT(DISTINCT `username`) AS `count`,date(`AcctStartTime`) AS `date` FROM `radacct` where date(AcctStartTime) = curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY  AND date(AcctStartTime) < curdate() - INTERVAL DAYOFWEEK(curdate())-1 DAY";

/*
SELECT count(username) as count, date(AcctStartTime) AS date1 
FROM radacct where date(AcctStartTime) >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY  AND date(AcctStartTime) < curdate() - INTERVAL DAYOFWEEK(curdate())-1 DAY
GROUP BY date1
*/
$query = mysql_query($sql);
while($result = mysql_fetch_array($query))
{
  $rows[]=array("c"=>array("0"=>array("v"=>$result['date1'],"f"=>NULL),"1"=>array("v"=>(int)$result['count'],"f" =>NULL)));
  
}

echo $format = '{
"cols":
[
{"label":"date1","pattern":"","type":"string"},
{"label":"count","pattern":"","type":"number"}
],
"rows":'.json_encode($rows).'}';
}

else if($_POST['month'])
{
	$sql="select `employee_id`,`date`,`checkin`,`checkout`
from `attendence` 
where `date` BETWEEN  MONTH('01-10-2012')
AND  MONTH( '31-10-2012')";
	//do some thing
	
	
	
	
}?>

当用户从选择对象中选择星期时,我想使用谷歌图表制作图表(每月、每周、每年) 我使用 ajax 将用户的选择发送到 pie_chart.php 并根据它进行查询 之后,我将结果转换为 json 以将其发送到 test.php,它将检索此 json 数据以制作图表 希望我清楚地解释了我的问题

【问题讨论】:

  • AJAX 中的 A 代表 asynchronous。请不要同步使用。
  • 您想要从pie_chart.php 返回到调用代码的任何数据都需要返回到调用代码。例如,通过回显 JSON 结构。然后,您的客户端 AJAX 调用可以有一个回调处理程序(jQuery 的 $.ajax() 函数文档显示了如何执行此操作),它将接收来自服务器的响应。
  • $.ajax 的返回值是 Deferred,而不是 XHR,我不认为您不能在其上调用 responseText。 不要使用 async:false,它会锁定浏览器并导致糟糕的用户体验。一些浏览器已经弃用它。您可以将 .done() 和 .fail() 链接到您的 ajax 调用,以有序的方式处理异步响应。详细阅读api.jquery.com/jquery.ajax
  • 请停止使用mysql_ 代码库。由于安全问题,它很久以前就被弃用并在 PHP7 中完全删除。它不允许您正确地防止 SQL 注入(通过使用参数化查询)并且有其他已知问题。它不应该用于任何新代码,任何旧代码都应该计划尽快从它迁移到 mysqli_ 或 PDO。如果不出意外,当您最终需要升级到 PHP7 时,您的代码将完全停止工作,无论是否存在安全漏洞。
  • 要真正解决您的初始问题,您需要指定 ajax 调用的 data: 选项,并发送用户的选择以匹配您在 PHP 中提到的 $_POST["whatever"] 变量名.例如如果您从 ajax 发送data: { "var1" : 1, "var": "a" },那么当 PHP 接收到请求时,$_POST 中将包含两个项目,因此$_POST["var1" 将包含1$_POST["var2"] 将包含"a"。这就是您将用户的选择发送到服务器的方式。

标签: javascript json ajax


【解决方案1】:

在你的 Ajax 中使用 data: 发送数据参数

var aData= [];
aData[1]="Some value";
    var jsonData = JSON.stringify({ aData:aData});
    $.ajax({
        type: "POST",
         url: "pie_chart.php", 
        data: jsonData,
        contentType: "application/json; charset=utf-8",
        dataType: "json", // dataType is json format
        success: OnSuccess,
        error: OnErrorCall
    });

    function OnSuccess(response) {

    }
    function OnErrorCall(response) { console.log(error); }
    });

【讨论】:

  • 为什么要以数组的形式传递数据?
  • 我刚刚添加了示例,最后通过 JSON.stringify() 数组将解析为 JSON 格式
  • 在您的示例中,这突然意味着您的 PHP 脚本将需要考虑变量将位于名为 aData 的数组中,而不仅仅是获取单独的 post 变量。恕我直言,将适当的对象传递给data 更容易
  • 即:data : {id : "week"}
  • 我将更新 pie_chart.php 的内容以显示我想要的内容,请注意
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-18
相关资源
最近更新 更多