Ошибка 500 из запроса с использованием JSON в CodeIgniter в зависимости от порядка запросаPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Ошибка 500 из запроса с использованием JSON в CodeIgniter в зависимости от порядка запроса

Сообщение Anonymous »

Я работаю над проектом CodeIgniter (v3.1.9), который отображает графики данных, полученных из баз данных. У меня есть 1 контроллер, 1 модель, основное представление и каждый график в виде подпредставлений.

Моя модель (в настоящее время содержит только 2 запроса), возвращающая массив.

Мой контроллер прост: индексная функция для передачи представлений графика в основное представление и две функции для каждого графика. 1, который просто печатает закодированный JSON, а другой возвращает представление графика в основное представление.

Мои представления содержат Javascript/jQuery, который получает JSON и создает/отображает график (с использованием c3js).

Проблема: Один из графиков отображается нормально, а другой вызывает ошибку 500. . Если я переместию запрос, вызывающий 500, выше другого в моей модели... оба отображаются нормально, и ошибок нет.

Я нашел аналогичный вопрос, заданный 2 года назад, но он остался без ответа.

Что вызывает эту ошибку 500 в зависимости от порядка функций? Как это исправить?

Контроллер:

class ARDash extends CI_Controller {

function __construct() {
parent::__construct();
$this->load->model("ar_dash_model");
$this->load->database();
$this->load->helper('url');
}
public function index() {
$data['content'] = array();
array_push($data['content'], $this->displayReportsByClassification());
array_push($data['content'], $this->displayReportsByOccupation());

$this->load->view("Dash/AR/dash_view",$data);
}

function displayReportsByClassification() {
return $this->load->view("Dash/AR/by_classification.php", null, true);
}

function jsonReportsByClassification() {
$data = $this->ar_dash_model->dbGetReportsByClassification();
print json_encode($data);
}

function jsonReportsByOccupation() {
$data = $this->ar_dash_model->dbGetReportsByOccupation();
print json_encode($data);
}
function displayReportsByOccupation() {
$data = $this->load->view("Dash/AR/by_occupation.php", null, true);
return $data;
}
}


Модель:

class ar_dash_model extends CI_Model {

function dbGetReportsByClassification() {
$results = array();
$sql = '
SELECT
Event_Class_ID,
EventClass_Name as name,
count(Event_ID) as count
FROM
Reports.tblEvent as incident
LEFT JOIN Reports.tblEventClass
ON Event_Class_ID = EventClass_ID
WHERE
incident.Event_Deleted is null AND
incident.Event_District_ID = '.$this->di.'
AND
Event_Occurred_Date_Time BETWEEN CAST("'.($this->dateRange["from"]).'" AS DATE) AND CAST("'.($this->dateRange["to"]).'" AS DATE)
GROUP BY
Event_Class_ID
ORDER BY count DESC
';

$query = $this->db->query($sql);
foreach ($query->result() as $row) {
if($row->name != '') {
$tmp = array();
$tmp['classification'] = $row->name;
$tmp['count'] = $row->count;
array_push($results, $tmp);
}
}
return $results;
}
}

/****************
* Moving this above the other function makes the 500 go away
*********/
function dbGetReportsByOccupation() {
$results = array();
$sql = '
SELECT
count(I.Event_ID) as count,
O.Occupation_Name as occupation
FROM
Reports.tblEvent AS I INNER JOIN Reports.tblARPerson AS P ON I.Event_ARPerson_ID = P.ARPerson_ID INNER JOIN mainDb.tblResource as R ON I.Event_Resource_ID = R.Resource_ID INNER JOIN mainDb.tblOccupation as O ON R.Resource_Primary_Occupation_ID = O.Occupation_ID
WHERE
I.Event_District_ID = '.$this->di.'
AND
I.Event_Deleted is null
AND
I.Event_Occurred_Date_Time BETWEEN CAST("'.($this->dateRange["from"]).'" AS DATE) AND CAST("'.($this->dateRange["to"]).'" AS DATE)
GROUP BY
O.Occupation_ID
ORDER BY
count DESC
';

$query = $this->db->query($sql);
foreach ($query->result() as $row) {
if($row->count != '') {
$tmp = array();
$tmp['occupation'] = $row->occupation;
$tmp['count'] = $row->count;

array_push($results, $tmp);
}
}
return $results;
}


Представление графика (для запроса, вызывающего 500):




$.getJSON("index.php/ARDash/jsonReportsByOccupation", function(data){
var chart = c3.generate({
bindto: '#occupationChart',
data: {
json: data,
keys: {
x: 'occupation',
value: ['Number of incidents']
},
type: 'bar',
empty: {
label: {
text: "No Data"
}
}
},
tooltip: {
show: true,
grouped: true
},
axis: {
rotated: true,
x: {
label: {
position: 'outer-center',
},
type: 'category',
categories: 'occupation'
},
y: {
tick: {
format: d3.format("d"),
outer: true,
count: 4
}
}
},
legend: {
show: false
}
});
});




Подробнее здесь: https://stackoverflow.com/questions/519 ... uery-order
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»