2016-03-18 4 views
3

EDITПолучение нескольких массивов в AJAX с PHP

enter image description here

мне нужно, чтобы получить два неправдоподобные массивов в один массив, и использовать echo json_encode, чтобы отправить его обратно в AJAX.

Вот мой PHP код:

header('Content-Type: application/json'); 
$arr = array(); 
$user = $_SESSION['username']; 
$id_logged = $_SESSION['login_id']; 



$date1 = $_POST['current_year']; 

    //$res = array(); 
    $c = "cash"; 
    $i = "installment"; 
    //SUM of cash paid Month 
    $sql = "SELECT 
    count(app_id) as patients, 
    t.m as month 
FROM ( 
    SELECT 1 AS m UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION 
    SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION 
    SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12) AS t 
LEFT JOIN dentist.appointment ON t.m = month(date_app) AND 
      id_logged = :logged AND year(date_app) = :year_now 
GROUP BY t.m"; 
$sqlStmt = $conn->prepare($sql); 
$sqlStmt->bindValue(":logged", $id_logged); 
$sqlStmt->bindValue(":year_now", $date1); 
$exec = $sqlStmt->execute(); 
$res1 = $sqlStmt->fetchAll(); 

$sql2 = "SELECT 
    count(app_id)+1 as patients, 
    t.m as month 
FROM ( 
    SELECT 1 AS m UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION 
    SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION 
    SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12) AS t 
LEFT JOIN dentist.appointment ON t.m = month(date_app) AND 
      id_logged = :logged AND year(date_app) = :year_now 
GROUP BY t.m"; 
$sqlStmt2 = $conn->prepare($sql2); 
$sqlStmt2->bindValue(":logged", $id_logged); 
$sqlStmt2->bindValue(":year_now", $date1); 
$exec2 = $sqlStmt2->execute(); 
$res2 = $sqlStmt2->fetchAll(); 

$res['one']=$res1; 
$res['two']=$res2; 

echo json_encode($res); 

А вот ответ на XHR:

enter image description here

enter image description here

Теперь на сценарий AJAX, мне нужно, чтобы получить каждую часть массива, поэтому я могу отобразить его на диаграмме:

success:function(res) 
{ 
    var patientData = []; 
    $.each(res, function(key, row) 
    { 
    patientData.push(row['one']); 
    console.log(patientData); 
    }); 
    //Bar Chart Script; 
} 

Но я не вижу никаких данных на консоли или на гистограмме. Результатом консоли undefined:

enter image description here

+1

patientData.push (строка); <- попробуйте это –

+0

Да и как я получаю доступ к первому массиву? 'patientData ['one']' или 'patientData [0]' – androidnation

+0

patientData [0]. Поскольку вы ввели строки в patientData, который является массивом –

ответ

0

Try:

success:function(res) 
{ 
    var res = $.parseJSON(res); 
    console.log(res); 
    var patientData = []; 
    $.each(res, function (key, row) 
    { 
    patientData.push(row.one); 
    console.log(patientData); 
    }); 
    //Bar Chart Script; 
} 
+0

Да и как я обращаюсь к первому массиву? 'patientData ['one']' или 'patientData [0]' – androidnation

+0

Проверьте измененный ответ $ .each (res, function (key, row) {...}); –

+0

измененный код дал мне на консоли 'undefined' – androidnation

1

Вот как это сделать:

success: function(data){ 
     var patientData = []; 
     var res = $.parseJSON(data); 
     $.each(res, function(index, element) { 
      alert(res[index]); 
      patientData.push(res[index]); 
     }); 
    } 
+0

'alert [row [0]]' дал мне 'alert [object] [object]' и 'alert [res [0]]' дал мне 'alert undefined' – androidnation

+0

вы не можете использовать res [0] за пределами '$ .each', попробуйте patientData [0] вместо –

+0

Если вы видите на PHP, когда я работал только с одним массивом, который я отправляю внутри переменной 'AS 'пациентов' и в AJAX, я получаю их как «толчок» (строка «пациенты»)). Теперь, когда я отправляю 2 массива, как мне их писать? – androidnation

1

Вы получите ключ ("один", " два ", ...) в key и данные строки в row

В $ .each возвращает имя объекта собственности (key) в первом параметре и имущества value в качестве второго параметра, так что здесь мы идем следующим образом:

success:function(res){ 
    var res = $.parseJSON(res); 
    console.log(res); 
    var patientData = []; 

    $.each(res, function (key, row){ 
    patientData.push(row); 
    console.log(patientData); 
    }); 
    //Bar Chart Script; 
} 

Например, мы можем проверить результат как этот

$.each({"one":[1, 2, 3, 4], "two":[5, 6, 7, 8]}, function (key, value){ 
 
    console.log(key, value); 
 
    
 
    /* write to document */ 
 
    document.write("<br>"); 
 
    document.write("Key:" + key); 
 
    document.write(", Value:" + value); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

nope. По-прежнему нет результата – androidnation

+0

Как вы определили 'patientData' в' success', так что вы не сможете получить доступ к нему за пределами этой функции; если вы пытаетесь это сделать, просто говорите;) – itzmukeshy7

+0

Если вы видите на PHP, когда я работал только с одним массивом, который я отправляю внутри переменной 'AS 'пациентов' и в AJAX, я получаю их как 'нажимные (строка [ 'пациентов'])'. Теперь, когда я отправляю 2 массива, как мне их писать? – androidnation

Смежные вопросы