2016-10-19 8 views
0

以下は、最終的に配列を構築するいくつかのクエリです。JQueryを使用してPHP配列結果を取得する方法

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); 
    } 
} 

JQueryに戻った後、alert(re);は、正常に配列を作成したことを示しています。

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

enter image description here

しかし、私は配列データへのアクセスのトラブルを抱えています。

data = $.parseJSON(re); 

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

と、この:

data = $.parseJSON(re); 

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

を私もdot notationを試してみた成功せず、これは私が試したものです。

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

以前はJSONを使用していなかったので、なぜ配列データを取得できないのか分かりません。どんな助けもありがとう。ありがとう。

+2

スクリーンショットは悪です。すべてのテキスト出力をコピーして貼り付けてください。 –

+0

最初の試行でアラートには何が含まれていましたか? JSONはオブジェクトの配列を表しているので、 '' '0 = [Object object]' ''のようなものを見ることが期待されます。これは何が起こったのですか、アラートは表示されませんでしたか? –

+0

'私もドット表記を試みました。 ' - どこにありますか? 'alert(i +" = "+ val);'の出力をポストしてください。 – ravisachaniya

答えて

2

次のコードチェックreは、文字列、またはオブジェクトであるかどうか。後者は、jQuery.ajax()メソッドが "json" dataTypeと共に使用される場合に可能です。また、応答MIMEタイプがapplication/json(HTTPヘッダーのContent-Type)の場合、jQueryは自動的にJSONを解析できます。したがって、reがjQueryによって解析されているかどうかを確認することは良い考えです。

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); 
} 

私はPHPから適切なコンテンツタイプを返すお勧めします:

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

ヘッダーを追加することがトリックでした。あなたの洞察力、Rusianに感謝します。これは本当に私を助けてくれました。ありがとうございました。 – Landslyde

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

'' '' 'jsonに' '' 'dataType'''を設定する必要があります"' '$ .ajax'''設定で' '' 'になります。 –

1

このコードを試してください:)

// 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>

関連する問題