Как получить ответ в вызове AJAX типа JSON в PHP?

Я не могу получить данные в случае успешного вызова 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 поэтому график остается пустым. Что я должен делать?

1

Решение

В вашем файле reports.blade.php: добавьте следующую строку в успех ajax, как показано ниже:

....
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)
{
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 Controller или в структуре связи.

Также возможно получить данные в виде строки, и вам нужно обрезать их как json в вашем JavaScript (var parsedObjext = JSON.parse (data);).

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector