jjzjj

php - 使用ajax和php在下拉列表中动态更新谷歌图表

coder 2024-04-20 原文

我必须根据下拉值显示谷歌图表,其中包含商店 ID 我正在从 mysql 中检索数据,值没有问题,我正在根据 ajax 中的商店 id 检索数据,并在输入框中确认它也可以。

但我不知道如何在不重新加载页面的情况下使用这些值更新该图表。 这是我的带有硬编码值的 google 图表代码。

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>newChart</title>
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
        <script type="text/javascript"> 
          google.load("visualization", "1", {packages:["corechart"]});
          google.setOnLoadCallback(drawChart);
          function drawChart()
          {var data = google.visualization.arrayToDataTable([['Company & Model', 'Views'],['Samsung Hero Music E1232B',5],['Samsung Galaxy Y S5360',7],['Samsung Galaxy Ace S5830',7],['Karbonn K 1212',2],]);      
            var options = {
              title: 'Most Popular Item ',
              hAxis: {title: 'Brand', titleTextStyle: {color: 'red'}}};
            var chart = new google.visualization.ColumnChart(document.getElementById('MPI_chart_div'));
            chart.draw(data, options);
          }
          </script>
    </head>
    <body>
    <h3>COLUMN CHART FOR MOST POPULAR ITEM </h3>
        Select Shop  <select id="MPI_selected_shop" onchange="MPI_set_shop(this.value);">           
                <option value="all_Shops">All Shops</option>
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                 </select>
<input type="text" id="sd"  />

        <div id="MPI_chart_div" style="width: 800px; height: 400px;"></div> 
    </body>
    </html>

这是脚本标记内同一页面中的我的 ajax 代码

var xmlHttp

                function MPI_set_shop(str)
                { 
                    alert(str);
                    xmlHttp=GetXmlHttpObject();
                    if (xmlHttp==null)
                    {
                      alert ("Your browser does not support AJAX!");
                      return;
                    } 
                    var url="chart.php";
                    url=url+"?q="+str;
                    alert(url);

                    xmlHttp.onreadystatechange=stateChanged;
                    xmlHttp.open("GET",url,true);
                    xmlHttp.send(null);
                }

                function stateChanged() 
                { 
                    if (xmlHttp.readyState==4)
                    { 
                        document.getElementById("sd").value=xmlHttp.responseText;

                        $st=xmlHttp.responseText;

                        alert($st);

                    }
                }

这是我使用 ajax 从 mysql 获取格式化数据的 chart.php

<?php
 $testid=0;
$testid=$_REQUEST["q"];
//echo $testid;

$con = mysql_connect("localhost","root","");
                if (!$con)
                {
                    die('Could not connect: ' . mysql_error());
                }
                // Select Database
                mysql_select_db("mysql", $con) or die('Could not connect: ' . mysql_error());;

                                    $qMostPopularItem = "SELECT t.pr_id,p.pdt_company_name,p.pdt_model_name,SUM(t.count) AS count FROM tmp AS t INNER JOIN product_mapping AS p ON t.pr_id = p.pr_id AND t.shop_id =$testid GROUP BY pr_id ORDER BY t.count DESC;";

                                        $mpi = mysql_query($qMostPopularItem,$con) or die('Could not fetch MPI: ' . mysql_error());

                                      while($infoMPISW = mysql_fetch_assoc($mpi)) 
                                        { 
                                                echo "['".$infoMPISW['pdt_company_name']." ";
                                                echo $infoMPISW['pdt_model_name'] ."',";
                                                echo $infoMPISW['count'],"],";

                                        }

                      ?>

最佳答案

在 Ajax 响应中使用新值再次调用 drawChart() 函数。下面是我试过的代码。

索引文件

<script type="text/javascript" src="https://www.google.com/jsapi"></script>
        <script type="text/javascript"> 
          google.load("visualization", "1", {packages:["corechart"]});
          google.setOnLoadCallback(drawChart);
          function drawChart()
          {
            alert('called');
            var data = google.visualization.arrayToDataTable([['Company & Model', 'Views'],['Samsung Hero Music E1232B',5],['Samsung Galaxy Y S5360',7],['Samsung Galaxy Ace S5830',7],['Karbonn K 1212',2],]);      
            var options = {
              title: 'Most Popular Item ',
              hAxis: {title: 'Brand', titleTextStyle: {color: 'red'}}};
            var chart = new google.visualization.ColumnChart(document.getElementById('MPI_chart_div'));
            chart.draw(data, options);
          }
          function drawChart2()
          {
            alert('called2');
            var data = google.visualization.arrayToDataTable([['Company & Model', 'Views'],['Samsung Music E1232B',5],['Samsung S5360',7],['Samsung S5830',7],['Karbonn K 1212',2],]);      
            var options = {
              title: 'Most Popular Item ',
              hAxis: {title: 'Brand', titleTextStyle: {color: 'red'}}};
            var chart = new google.visualization.ColumnChart(document.getElementById('MPI_chart_div'));
            chart.draw(data, options);
          }
          </script>
<script>
var xmlHttp

                function MPI_set_shop(str)
                { 
                    alert(str);
                    if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        alert(xmlhttp.responseText);
        //google.load("visualization", str, {packages:["corechart"]});
        //google.setOnLoadCallback(drawChart);
        drawChart2(); // Note down here..
    }
  }
xmlhttp.open("GET","chart.php?q="+str,true);
xmlhttp.send();
                }                
</script>

<h3>COLUMN CHART FOR MOST POPULAR ITEM </h3>
        Select Shop  <select id="MPI_selected_shop" onchange="MPI_set_shop(this.value);">           
                <option value="all_Shops">All Shops</option>
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                 </select>
<input type="text" id="sd"  />

        <div id="MPI_chart_div" style="width: 800px; height: 400px;"></div> 

请注意,我已经创建了另一个名为 drawChart2() 的函数,但如果您调用 drawChart(),那么它也会向您发出“已调用”的警报。您只需要在其中传递新值。希望以上回答对您有所帮助。最重要的是,除了回调函数,我什么都没做。 [虽然我更改了 javascript ajax 代码,但这不会有任何问题。]

关于php - 使用ajax和php在下拉列表中动态更新谷歌图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13100390/

有关php - 使用ajax和php在下拉列表中动态更新谷歌图表的更多相关文章

  1. php - 通过 PHP 中的 SendGrid 以编程方式发送电子邮件(批量电子邮件) - 2

    我们使用SendGrid发送交易电子邮件已有一段时间了,但是-我们开始以不同的时间间隔以自动方式发送批量电子邮件。我们正在尝试寻找一种方法将这些批量电子邮件发送到sendgrid以进行递送,而不是我们当前的流程(遍历用户列表并迭代地发送电子邮件)使用sendgrid以外的东西不是一个选项我们基本上需要有一种方法来上传用户列表、电子邮件中关键字的替换值:%first_name%、%username%等-以便将这些电子邮件发送给用户。实现此目标的最佳方法是什么? 最佳答案 您可以通过多种方式在现有的SendGrid基础结构中执行此操作。

  2. php - 如何在php中将一系列图像转换成一个pdf文档 - 2

    我已经搜索了一段时间,找不到明确的答案。我有一个包含图像的文件夹:001.png,002.png....等我试过的。$allImages='folder/001.pngfolder/002.pngfolder/003.png';//and$allImages='folder/001.png,folder/002.png,folder/003.png';//and$allImages='-adjoinfolder/001.png-adjoinfolder/002.png-adjoinfolder/003.png';然后:exec(conve

  3. php - 如何在 Laravel 队列中使用模型 - 2

    我正在尝试将邮寄列表从CSV导入到我的数据库中。我的Laravel中有两个模型负责执行此操作:Target和Mailing(一个Target有许多Mailings)我正在使用带有Beanstalkd的队列系统。我正在使用:Queue::push('ImportCSV',array('file'=>$file->getClientOriginalName(),'target'=>$name));推送我的工作,然后我有ImportCSV工作类:classImportCSV{publicfunctionfire($job,$d

  4. php - 将 php 变量从一个文件传递到另一个文件? - 2

    我在主文件(main.php)中设置了一个变量,并且需要第二个文件(uploads.php)来引用在第一个文件中设置的变量。它现在正在返回未定义。第二个文件用$.load加载到第一个文件中:下面的代码示例-Main.php内容:<?php$accountName=get_option('account_name');?><divid="uploads"></div><ahref="#"onclick="loadUploadsFile()">LoadYourPlaylist&l

  5. php - Symfony2.3 多对多形式 - 2

    我在处理我的表单时遇到了一些问题。我的表单布局如下:用户(FOSUserBundle)成员(自定义类)地区(自定义类)成员(member)表单是用户表单的子表单,区域表单是成员(member)表单的子表单。首先,我得到的错误是:Neithertheproperty"region"noroneofthemethods"setRegion()","_set()"or"_call()"existandhavepublicaccessinclass"Netsite\Bundle\AdminBundle\Entity\Mem

  6. php - 操作数类型冲突 : text is incompatible with uniqueidentifier - 2

    我见过类似的错误消息,但大多数都与将int或float与uniqueidenifier进行比较有关,这让您明白为什么会出错。我的错误是这样的:SQLSTATE[22018]:Invalidcharactervalueforcastspecification:206[Microsoft][SQLServerNativeClient11.0][SQLServer]Operandtypeclash:textisincompatiblewithuniqueidentifier(SQLExecute[206]at/usr/src/php-5.4.8/ext/pdo_odbc/odbc_stmt.

  7. php - 如何只允许某些设备访问网站 - 2

    我们正在开发基于网络的内部应用程序,用于在智能手机和平板电脑上查看数据报告。我们的客户要求我们提供只有特定设备才能访问内容的可能性。因此,我们使用基于javascript/HTML5的技术,我们无法读取唯一ID,如IMEI或设备uuid。另一方面,我们可以使用ASP、PHP等服务器技术来获得成功。我有几个想法不会导致想要的结果(这里讨论的一个:Persistentclient-sidewebstorage)。我想知道您是否有什么想法只允许某些设备访问网站? 最佳答案 只有在其之上实现传统登录方法时,这种访问控制才是“安全的”,即用户

  8. php - 使用PHP将单个图像文件上传到FTP - 2

    在这里把我的头发拉出来一点。我想要做的就是有一个HTML表单,然后用PHP将所选文件上传到FTP服务器上的某个目录,但似乎没有任何工作正常。这是html表单:<formaction=""enctype="multipart/form-data"method="post"><inputname="file"type="file"/><inputname="submit"type="submit"value="UploadFile"/

  9. php - Doctrine 2类表继承YML - 2

    我正在尝试在ZF2和Doctrine2中使用类表继承。我的实现非常简单。我想我已经设置好了类结构,但我认为某处的某些设置可能存在问题。不幸的是,我找到了很多关于类设置的文档,但关于YML实现的文档并不多。每个人似乎都诉诸于使用学说工具来生成一切。根据设置方式,使用条令工具有点问题,尤其是在使用ZF2时。另外,我认为这是一个学习机会。所以,这就是我所拥有的:当前问题:我没有从子类/表中获取任何数据:.array(1){[0]=>classMyCompany\Domain\Model\Customer\CustomerNote#2852(9){protected$customer=&

  10. php - 如何在 Amazon PHP SDK 上设置自定义元数据 - 2

    我试过:$objS3->putObject(array('Bucket'=>$sBucket'Key'=>$sBucketFolder.$sFilenameToSave,'SourceFile'=>$sFile,'ACL'=>'public-read''Metadata'=>['Content-Type'=>'text/css','Content-Encoding'=>'gzip'

随机推荐

  1. php - 通过 PHP 中的 SendGrid 以编程方式发送电子邮件(批量电子邮件) - 2

    我们使用SendGrid发送交易电子邮件已有一段时间了,但是-我们开始以不同的时间间隔以自动方式发送批量电子邮件。我们正在尝试寻找一种方法将这些批量电子邮件发送到sendgrid以进行递送,而不是我们当前的流程(遍历用户列表并迭代地发送电子邮件)使用sendgrid以外的东西不是一个选项我们基本上需要有一种方法来上传用户列表、电子邮件中关键字的替换值:%first_name%、%username%等-以便将这些电子邮件发送给用户。实现此目标的最佳方法是什么? 最佳答案 您可以通过多种方式在现有的SendGrid基础结构中执行此操作。

  2. php - 如何在php中将一系列图像转换成一个pdf文档 - 2

    我已经搜索了一段时间,找不到明确的答案。我有一个包含图像的文件夹:001.png,002.png....等我试过的。$allImages='folder/001.pngfolder/002.pngfolder/003.png';//and$allImages='folder/001.png,folder/002.png,folder/003.png';//and$allImages='-adjoinfolder/001.png-adjoinfolder/002.png-adjoinfolder/003.png';然后:exec(conve

  3. php - 如何在 Laravel 队列中使用模型 - 2

    我正在尝试将邮寄列表从CSV导入到我的数据库中。我的Laravel中有两个模型负责执行此操作:Target和Mailing(一个Target有许多Mailings)我正在使用带有Beanstalkd的队列系统。我正在使用:Queue::push('ImportCSV',array('file'=>$file->getClientOriginalName(),'target'=>$name));推送我的工作,然后我有ImportCSV工作类:classImportCSV{publicfunctionfire($job,$d

  4. php - 将 php 变量从一个文件传递到另一个文件? - 2

    我在主文件(main.php)中设置了一个变量,并且需要第二个文件(uploads.php)来引用在第一个文件中设置的变量。它现在正在返回未定义。第二个文件用$.load加载到第一个文件中:下面的代码示例-Main.php内容:<?php$accountName=get_option('account_name');?><divid="uploads"></div><ahref="#"onclick="loadUploadsFile()">LoadYourPlaylist&l

  5. php - Symfony2.3 多对多形式 - 2

    我在处理我的表单时遇到了一些问题。我的表单布局如下:用户(FOSUserBundle)成员(自定义类)地区(自定义类)成员(member)表单是用户表单的子表单,区域表单是成员(member)表单的子表单。首先,我得到的错误是:Neithertheproperty"region"noroneofthemethods"setRegion()","_set()"or"_call()"existandhavepublicaccessinclass"Netsite\Bundle\AdminBundle\Entity\Mem

  6. php - 操作数类型冲突 : text is incompatible with uniqueidentifier - 2

    我见过类似的错误消息,但大多数都与将int或float与uniqueidenifier进行比较有关,这让您明白为什么会出错。我的错误是这样的:SQLSTATE[22018]:Invalidcharactervalueforcastspecification:206[Microsoft][SQLServerNativeClient11.0][SQLServer]Operandtypeclash:textisincompatiblewithuniqueidentifier(SQLExecute[206]at/usr/src/php-5.4.8/ext/pdo_odbc/odbc_stmt.

  7. php - 如何只允许某些设备访问网站 - 2

    我们正在开发基于网络的内部应用程序,用于在智能手机和平板电脑上查看数据报告。我们的客户要求我们提供只有特定设备才能访问内容的可能性。因此,我们使用基于javascript/HTML5的技术,我们无法读取唯一ID,如IMEI或设备uuid。另一方面,我们可以使用ASP、PHP等服务器技术来获得成功。我有几个想法不会导致想要的结果(这里讨论的一个:Persistentclient-sidewebstorage)。我想知道您是否有什么想法只允许某些设备访问网站? 最佳答案 只有在其之上实现传统登录方法时,这种访问控制才是“安全的”,即用户

  8. php - 使用PHP将单个图像文件上传到FTP - 2

    在这里把我的头发拉出来一点。我想要做的就是有一个HTML表单,然后用PHP将所选文件上传到FTP服务器上的某个目录,但似乎没有任何工作正常。这是html表单:<formaction=""enctype="multipart/form-data"method="post"><inputname="file"type="file"/><inputname="submit"type="submit"value="UploadFile"/

  9. php - Doctrine 2类表继承YML - 2

    我正在尝试在ZF2和Doctrine2中使用类表继承。我的实现非常简单。我想我已经设置好了类结构,但我认为某处的某些设置可能存在问题。不幸的是,我找到了很多关于类设置的文档,但关于YML实现的文档并不多。每个人似乎都诉诸于使用学说工具来生成一切。根据设置方式,使用条令工具有点问题,尤其是在使用ZF2时。另外,我认为这是一个学习机会。所以,这就是我所拥有的:当前问题:我没有从子类/表中获取任何数据:.array(1){[0]=>classMyCompany\Domain\Model\Customer\CustomerNote#2852(9){protected$customer=&

  10. php - 如何在 Amazon PHP SDK 上设置自定义元数据 - 2

    我试过:$objS3->putObject(array('Bucket'=>$sBucket'Key'=>$sBucketFolder.$sFilenameToSave,'SourceFile'=>$sFile,'ACL'=>'public-read''Metadata'=>['Content-Type'=>'text/css','Content-Encoding'=>'gzip'