本人纯菜鸟   求大神帮助  写了一个demo准备把数据库的数据通过json的方式由JS前端获取  现在问题出在 前端页面获取php函数返回值时  。demo大概分为如下页面 
conn.php连接数据库
getdata.php 构建了一个类 类里有不同的方法  以便提取数据库不同列的内容
AjaxService.php  含有多个php自定义函数 建立getdata里的类利用类方法获取不同返回值
index.html  利用ajax获取AjaxService.php页面的输出 目前conn页面到AjaxService都有数据 唯独AjaxService到index页面数据读不出来  按照别人例子写的ajax代码如下
//ajax获取后台dateline数据 
function fetchDateline(){ 
var arr=new Array(); 
$.ajax( 

url:"AjaxService.php?method=GetDateline", 
dataType:"text", 
success:function(data) 

//调用函数获取值,转换成数组模式 
 var ss=eval(data); 
 for(var i=0;i<ss.length;i++) 
 { 
arr.push(ss[i]);
 } 
 } 
}); 
return arr; 

getdata.php<?php 
require_once('conn.php'); 
class tPower{ 
 //获取x轴的日期数据
public function GetDateline() 

$pg=@pg_connect("host=localhost user=zjjtest password=zjj123 dbname=zjjtest") 
 or die("can't connect to database."); 
 $query="select dateline from t_power order by dateline"; 
 $result=@pg_query($pg,$query) or die("can't run query to table."); 
$data = array(); 
while($row=pg_fetch_row($result)) 

array_push($data,$row); 

return $data; 

//获取y轴的实际用电量 public function GetAP() 

$pg=@pg_connect("host=localhost user=zjjtest password=zjj123 dbname=zjjtest") 
 or die("can't connect to database."); 
 $query="select actual_power from t_power order by dateline"; 
 $result=@pg_query($pg,$query) or die("can't run query to table."); 
$data = array(); 
while($row=pg_fetch_row($result)) 

array_push($data,$row); 

return $data; 
} //获取y轴的预期用电量  public function GetEP() 

$pg=@pg_connect("host=localhost user=zjjtest password=zjj123 dbname=zjjtest") 
 or die("can't connect to database."); 
 $query="select expected_power from t_power order by dateline"; 
 $result=@pg_query($pg,$query) or die("can't run query to table."); 
$data = array(); 
while($row=pg_fetch_row($result)) 

array_push($data,$row); 

return $data; 
} } 
?>AjaxService.php<?php 
//通过本文件新建getdata文件中定义的对象,并调用对象的相应方法获取数据库数据的json形式数据以备传送前台js 
//获取日期
require_once('conn.php'); 
function GetDateline(){ 
require_once('getdata.php'); 
$tPower = new tPower(); 
$data = $tPower->GetDateline(); 
$json = json_encode($data); 
print_r($json); 

//获取实际用电量 
function GetAP(){ 
require_once('getdata.php'); 
$tPower = new tPower(); 
$data = $tPower->GetAP(); 
$json = json_encode($data); 
print_r($json); 

//获取预期用电量 
function GetEP(){ 
require_once('getdata.php'); 
$tPower = new tPower(); 
$data = $tPower->GetEP(); 
$json = json_encode($data); 
print_r($json); 
} ?>
哪位高手能帮忙指导一下问题出在哪里   十分感谢
此外前端js能否查看ajax返回来的数据对象   如果有我也好确定一下是否ajax这里就没传过来 或是传过来了是index其他地方调用错了  

解决方案 »

  1.   

    您的 AjaxService.php 至定义了函数,但并没有调用他们
      

  2.   


    //ajax获取后台dateline数据 
    function fetchDateline(){ 
    var arr=new Array(); 
    $.ajax( 

    url:"AjaxService.php?method=GetDateline", 
    dataType:"text", 
    success:function(data) 

    //调用函数获取值,转换成数组模式 
     var ss=eval(data); 
     for(var i=0;i<ss.length;i++) 
     { 
    arr.push(ss[i]);
     } 
     } 
    }); 
    return arr; 
    } 我以为
    url:"AjaxService.php?method=GetDateline", 
    这个语句就是调用了来着  能否基于上面的代码能给我一个正确调用的例子  不然我两眼一抹黑 method=GetDateline 看上去倒像是调用了  但不知怎么的没调到的感觉  囧
      

  3.   

    是吗?
    php 怎么知道你会去调用 GetDateline ?
    起码也得有 $_GET['method']();你当是框架呐
      

  4.   


    约莫理解到一点  看来问题出在ajax参数传递上 我再去试试  不行再来请教  谢谢
      

  5.   

    我是看了method=GetDateline这个以为他去调用了 仅
      

  6.   

    @xuzuning  版主 我又摆弄了一下 现在遇到一个问题  是php传过来的数组怎么让js获取 网上查到的代码是这样写的
    $.ajax( 

    url:"AjaxService.php", 
    data:{action:"GetEP"},
    dataType:"text", 
    success:function(data) 

     var ss=eval(data); 
     for(var i=0;i<ss.length;i++) 
     { 
    arr.push(ss[i]); 
     } 
     } 
    });可我从chrome浏览器里source查看却提示
    “uncaught typeerror:cannot read property 'length' of undefined”
    是我jQuery的版本问题么 还是我写错了  SS传过来的是后台getdata.php(完整代码在一楼)中函数的返回值  摸不着头脑
      

  7.   

    success:function(data) 

      alert(data); //你现在这里看一下得到的都是什么
      var ss=eval(data); 
      for(var i=0;i<ss.length;i++) 
      { 
        arr.push(ss[i]); 
       } 
      

  8.   


    弹了一个框  是空白的 除了确定按钮 看来是值没传过来 。。
    难道AjaxService.php中的
    $json = json_encode($data); 
    print_r($json); 
    的写法是错的?
    不应该啊 我在AjaxService.php测试页面中使用如下代码是能够显示出$json中字符串的
    $Dateline=call_user_func('GetDateline');
      

  9.   

    先撇开 ajax,手工调试一下
    浏览器地址栏:http://localhost/AjaxService.php?action=GetEP
    能看到什么?
      

  10.   


    补充一下  AjaxService.php页面输出print_r($json)的结果为:
    ["2016-01-01","2016-01-02","2016-01-03","2016-01-04","2016-01-05","2016-01-06","2016-01-07","2016-01-08","2016-01-09","2016-01-10","2016-01-11","2016-01-12","2016-01-13","2016-01-14","2016-01-15","2016-01-16","2016-01-17","2016-01-18","2016-01-19","2016-01-20"]
      

  11.   

    你再写个程序:
    <?php
    echo bin2hex(file_get_contents('http://localhost/AjaxService.php?action=GetEP'));
    运行后能看到什么?
      

  12.   

    运行后是空白   我现在留意一个细节 也是一直纳闷的一个地方  就是我所有测试页面都是通过一个按钮绑定了onclick事件 然后在时间里去写ajax传值的函数 而我最后的html页面(就是现在值没传过来的页面) 则没有这么一个按钮和onclick事件绑定  只是将jquery引入并在script标签下新建了自定义函数并调用ajax  这个函数我期望返回一个数组(在php中通过json_encode封装好的json) 然后直接在其他本页自定义函数中直接调用这个函数充当固定赋值的作用  我不太明白ajax的机制(以前完全没做过开发)  所以不知道问题是不是出在这里 必须有个按钮什么的触发这个ajax请求过程 还是页面载入时候这个函数的ajax部分会自动执行  我不清楚这个细节 如果是需要一个类似点击按钮的时间才能触发ajax向后端php发送请求 那么由于我现在的页面没有这么一个按钮和相关设置 导致alter(data)为空也就解释得通了 还请指教
      

  13.   

    @xuzuning 谢谢版主 搞定了  是自己粗心  在页面调用ajax时没写type:'POST',  所以请求没法出去  现在已经能够政策获取数值了  囧