2017-10-31 30 views
1

私はajaxの呼び出しの成功のデータを取得できません。成功のデータは空白のままです。私はどのようにしてデータを取得できますか........................................... .................................................. .................................................. .................................................. ....PHPでJson型のajax呼び出しで応答を取得するには?

reports.blade.php

$.ajax({ 
       type : "POST", 
       url : '{{ url('filter_reports') }}', 
       dataType: 'json', 
       data : { 
       'hours_from' : hours_from, 
       'hours_to' : hours_to, 
       'ddl_promotion' : ddl_promotion, 
       'ddl_shops' : ddl_shops, 
       'ddl_age_from' : ddl_age_from, 
       'ddl_age_to' : ddl_age_to, 
       'from_date' : from_date, 
       'to_date' : to_date, 
       'ddl_mall_center' : ddl_mall_center, 
       'ddl_postal_code' : ddl_postal_code, 
       'ddl_gender' : ddl_gender, 
       'ddl_report_type' : ddl_report_type, 
       'ddl_report_graph' : ddl_report_graph, 
       '_token' : '{{ csrf_token() }}' 
       }, 
       success : function(data) 
       { 
       if((ddl_report_type == 1 || ddl_report_type == 3 || ddl_report_type == 6 || ddl_report_type == 7) && ddl_report_graph == 1) 
       { 
        $('#myChart').replaceWith('<canvas id="myChart" width="100" height="50"></canvas>'); 
        var ctx = document.getElementById("myChart").getContext('2d');  
        var myChart = new Chart(ctx, { 
        type: 'bar', 
        data: { 
         labels: **data.x,** 
         datasets: [{ 
         label: 'Participants', 
         data: **data.y,** 
         backgroundColor: 'rgba(75,192,192,0.4)', 
         borderColor: 'rgba(75,192,192,1)', 
         borderWidth: 2 
         }] 
        }, 
        options: { 
         title: { 
         display: true, 
         text: 'Participants' 
         }, 
         scales: { 
         xAxes: [{ 
          gridLines: { 
          display: false 
          } 
         }], 
         yAxes: [{ 
          gridLines: { 
          display: false 
          },      
          ticks: { 
          beginAtZero:true, 
          min:**data.min,** 
          max:**data.max** 
          }     
         }] 
         } 
        } 
        }); 
       } 

ReportsController.php

if($report_graph == 1 || $report_graph == 2 || $report_graph == 3) 
      { 
      $get_data = DB::select("SELECT p.p_id,p.name,c.age FROM tbl_capture_img AS cap JOIN tbl_customers AS c ON c.c_id = cap.c_id JOIN tbl_promotions AS p ON p.p_id = cap.p_id WHERE cap.p_id = '{$promotion}'"); 
      $agerange = array('18-30','31-40','41-50','51-60','61-70','71-80','81-90','91-100'); 
      $final_age_range = '['.implode(',',$agerange).']'; 
      $agecount = array(0,0,0,0,0,0,0,0); 
      foreach($get_data as $data) 
      { 
       if($data->age >=18 && $data->age <= 30) 
       { 
       $agecount[0] += 1; 
       } 
       else if($data->age >=31 && $data->age <= 40) 
       { 
       $agecount[1] += 1; 
       } 
       else if($data->age >=41 && $data->age <= 50) 
       { 
       $agecount[2] += 1; 
       } 
       else if($data->age >=51 && $data->age <= 60) 
       { 
       $agecount[3] += 1; 
       } 
       else if($data->age >=61 && $data->age <= 70) 
       { 
       $agecount[4] += 1; 
       } 
       else if($data->age >=71 && $data->age <= 80) 
       { 
       $agecount[5] += 1; 
       } 
       else if($data->age >=81 && $data->age <= 90) 
       { 
       $agecount[6] += 1; 
       } 
       else if($data->age >=91 && $data->age <= 100) 
       { 
       $agecount[7] += 1; 
       } 
      } 
      $final_age_count = '['.implode(',',$agecount).']'; 
      $final['x'] = $final_age_range; 
      $final['y'] = $final_age_count; 

      $final['min'] = 0; 
      $final['max'] = max($agecount) + 5; 
      echo json_encode($final); 
      } 

出力

{"x":"[18-30,31-40,41-50,51-60,61-70,71-80,81-90,91-100]","y":"[4,0,0,0,0,0,0,0]","min":0,"max":9} 

しかし、私はdata.xの配列、data.y、data.min、data.maxので、グラフは空白のまま取得傾けます。私は何をすべきか?あなたはこのようなコードをトラブルシューティングする必要があります。この場合

答えて

0

まずチェック、Ajaxのレスポンスが正しい(とさえJSON)ではconsole.log()を持つ:

success : function(data) 
{ 
    console.log(data); 

それはその値を持つ場合ブロックを実行してalert()またはそれに類似したconsole.log()を使用するかどうかを確認してください。

if((ddl_report_type == 1 || ddl_report_type == 3 || ddl_report_type == 6 || ddl_report_type == 7) && ddl_report_graph == 1) 
{ 
    alert("hi"); or console.log("hi"); 

すべてが大丈夫だった場合、あなたのラベル内のデータへのアクセスがない:data.x、を、あなたはグローバル変数を定義し、それにアクセスした後でください必要があります。

success : function(data) 
{ 
    var gData = data; 

と使用:

labels: **gData.x,** 

各ステップは、データの問題があなたのLaravel PHPコントローラであり、任意の値を持っていない場合には、例えば、それを修正する必要が拒否された場合または通信構造。

また、データを文字列として取得することができます。JavaScript(var parsedObjext = JSON.parse(data);)でjsonとしてパースする必要があります。あなたのreports.blade.phpファイルで

0

.... 
success : function(data) 
      { 
      data = jQuery.parseJSON(data); 

/*Add this above line and you can then access data.x and data.y*/ 


      if((ddl_report_type == 1 || ddl_report_type == 3 || ddl_report_type == 6 || ddl_report_type == 7) && ddl_report_graph == 1) 
      { 
:以下のようにAJAXの成功内部以下の行を追加します。
関連する問題