2016-10-19 1 views
0

Im Folgenden finden Sie einige Abfragen, die letztendlich ein Array erstellen.So erhalten Sie PHP-Array-Ergebnisse mit JQuery

if(isset($_POST['getarray'])){ 
    try{ 
     $ret = array(); 
     $stmt = $db->prepare('SELECT groupdate, groupid 
            FROM participationtemp 
            WHERE memberid = :memberid 
            AND groupid = :groupid 
            ORDER BY groupdate, groupid DESC'); 
     $stmt->bindValue(':groupid', $_POST['groupid'], PDO::PARAM_INT); 
     $stmt->bindValue(':memberid', $_SESSION['memberid'], PDO::PARAM_INT); 
     $stmt->execute(); 
     $result = $stmt->fetchAll(); 
     foreach($result as $row){ 
      $attenddate = $row[0]; 
      $stmt = $db->prepare('SELECT h.clientid, attend, attend_date 
             FROM history AS h 
             INNER JOIN suspended AS s on s.clientid = h.clientid          
             WHERE h.memberid = :memberid 
             AND h.groupid = :groupid 
             AND attend_date = :attenddate 
             AND suspend = "N"'); 
      $stmt->bindValue(':memberid', $_SESSION["memberid"], PDO::PARAM_INT); 
      $stmt->bindValue(':groupid', $_POST['groupid'], PDO::PARAM_INT); 
      $stmt->bindValue(':attenddate', $attenddate, PDO::PARAM_STR); 
      $stmt->execute(); 
      $result = $stmt->fetchAll(); 
      foreach($result as $row) { 
       array_push($ret, ['id' => $row[0], 'gdate' => $row[2]]); 
      } 
     } 
     echo json_encode($ret); 
     exit(); 
    } catch (PDOException $ex){ 
      mail_error($ex); 
    } 
} 

Nachdem auf JQuery Rückkehr alert(re); zeigt erfolgreich das Array erstellt I.

success:function(re){ 
    alert(re); 

enter image description here

Aber ich habe Probleme mit den Array-Daten zugreifen. Ohne Erfolg, das ist, was ich versucht habe:

data = $.parseJSON(re); 

$.each(data, function(i, val) { 
    alert(i + "=" + val); 
}); 

und diese:

data = $.parseJSON(re); 

$.each(data, function(i, val) { 
    if(i == "id"){ 
     alert(i + "=" + val); 
    } 
    if(i == "gdate"){ 
     alert(i + "=" + val); 
    } 
}); 

Ich habe auch versucht dot notation.

Ich habe noch nie JSON verwendet und verstehe nicht, warum ich die Array-Daten nicht abrufen kann. Jede Hilfe wird geschätzt. Vielen Dank.

+2

Screenshots sind böse. Bitte kopieren Sie alle Textausgaben. –

+0

Was enthielt die Warnung bei Ihrem ersten Versuch? Der JSON stellt ein Array von Objekten dar, also würde ich erwarten, dass Sie etwas wie "0 = [Objektobjekt]" sehen. Ist das passiert oder hat sich der Alarm nicht einmal gezeigt? –

+0

'Ich habe auch Punktnotation ausprobiert. - wo ist es? und posten Sie bitte die Ausgabe von 'alert (i + "=" + val); '. – ravisachaniya

Antwort

2

Der folgende Code überprüft, ob re ein String oder ein Objekt. Letzteres ist möglich, wenn die Methode jQuery.ajax() mit "json" dataType verwendet wird. JQuery kann JSON auch automatisch analysieren, wenn der Antwort-MIME-Typ insbesondere application/json (der Content-Type HTTP-Header) ist. Es ist also eine gute Idee zu überprüfen, ob re von jQuery geparst wurde.

var d = typeof re === 'string' ? JSON.parse(re) : re; 
var i; 

for (i = 0; i < d.length; i++) { 
    console.log("id = ", d[i].id, 
       "gdate = ", d[i].gdate); 
} 

Ich würde empfehlen, den entsprechenden Inhaltstyp von PHP Rückkehr:

header ('Content-Type: application/json'); 
    echo json_encode($ret); 
    exit(); 
+0

Hinzufügen der Kopfzeile hat den Trick. Ich schätze deine Einsicht, Rusian. Das hat mir sehr geholfen. Vielen Dank. – Landslyde

1
$.each(re, function(i, val) { 
    alert(val.id + "=" + val.gdate); 
}); 
+1

Dies kann auch verlangen, dass '' 'dataType''' auf' '' "json gesetzt wird "' '' 'in' '' $ .ajax''' Konfiguration. –

1

diesen Code Versuchen :)

// Json in string format 
 
var jsonString = '[{"id":"1", "gdate":"2016-10-13"},{"id":"2", "gdate":"2016-10-13"},{"id":"3", "gdate":"2016-10-13"},{"id":"4", "gdate":"2016-10-13"},{"id":"5", "gdate":"2016-10-13"},{"id":"6", "gdate":"2016-10-13"}]'; 
 

 
// Convert string to json object 
 
var json = JSON.parse(jsonString); 
 

 
// Iterate over json object 
 
jQuery.each(json, function(index, value) { 
 
    console.log(index, value); 
 
}); 
 

 
// Simple access to attribute in json object 
 
console.log('json[1][\'id\'] = ', json[1]['id']);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Verwandte Themen