###前提・実現したいこと
mysqlのデータをphpで取得し、jsonにして
Ajaxで取得したいのです。
###発生している問題・エラーメッセージ
Ajaxのエラーでこちらがでました。
SyntaxError: Unexpected token < in JSON at position 0
こちらのサイトでも同じエラーので質問されている方がいらっしゃって、
形式がjsonじゃないからということでした。
そこでエラーの内容から
data:textに変更してconsole.logに出力してみると、
自身ののHTMLデータが入っていました。。。
初心者なのですが、ご教授下さい。
###該当のソースコード
php
1/* garally2.php */ 2require_once('./php/ponta.php');// DBに接続 3$db->query('set names utf8'); 4$ps = $db->query('select * from wan2 order by ban desc'); 5$users = null; 6while ($row = $ps->fetchObject()) 7 { 8 $users[] = array( 9 'ban'=> $row->ban 10 ,'nam' => $row->nam 11 ,'ttl' => $row->ttl 12 ,'mes' => $row->mes 13 ,'gaz' => $row->gaz 14 ,'dat' => $row->dat 15 ); 16 } 17// JSON形式で出力する 18 header('Content-Type: application/json; charset=utf-8'); 19 json_decode($users); 20 $users = json_encode( $users ); 21 echo $users; 22?>
"gallery1.php"に別jsファイルとしてこちらを読込ませました。
"gallery2.php"は同じディレクトリです。
js
1$.ajax({ 2 type: "POST", 3 data: "gallery2.php", 4 dataType: "json", 5 crossDomain: false, 6 scriptCharset: "UTF-8", 7 cache: false 8}).done(function(data) { 9 //console.log(data); 10 console.log($.parseJSON(data)); 11}).fail(function(XMLHttpRequest, textStatus, errorThrown) { 12 alert('Error : ' + errorThrown); 13});
###試したこと
まず、gallery2.phpを直接たたいたところ、形式はjsonの形になっているようでした。
gallery2.php
1[{"ban":"56","nam":"eru","ttl":"\u30dd\u30f3\u592a","mes":"\u306e\u306e","gaz":"20170905230540IMG_0322.JPG","dat":"2017-09-05"} 2(中略) 3{"ban":"47","nam":"eru","ttl":"fff","mes":"furanku","gaz":"2017090322121104_10_03_13_34.jpg","dat":"2017-09-03"}]
そこでエラーの内容から
data:textに変更してconsole.logに出力してみると、
自身のgallery1.phpのHTMLデータが入っていました。。。
js
1$.ajax({ 2 type: "POST", 3 data: "gallery2.php", 4 dataType: "text", 5 crossDomain: false, 6 scriptCharset: "UTF-8", 7 cache: false 8}).done(function(data) { 9 //console.log(data); 10 //console.log($.parseJSON(data)); 11}).fail(function(XMLHttpRequest, textStatus, errorThrown) { 12 alert('Error : ' + errorThrown); 13});
###なおしたことその2
php側で
json_decode()→json_encode()のみにして
header('Content-Type~はdatatypeがjsonなら不要なのではずした。
また、
指摘を頂いてphp側に
echo json_encode(array(
'ban' => 'ban1',
'nam' => 'nam1',
'ttl' => 'ttl1',
'gaz' => 'gaz1',
'dat' => 'dat1',
));
json側でちゃんと読込まれていたので
原因はphp側と判明。
gallery2.php
1<?php 2require_once('./php/ponta.php'); 3$db->query('set names utf8'); 4$ps = $db->query('select * from wan2 order by ban desc'); 5$users = []; 6 7while ($row = $ps->fetchObject()) 8{ 9 $users[] = array( 10 'ban'=> $row->ban 11 ,'nam' => $row->nam 12 ,'ttl' => $row->ttl 13 ,'mes' => $row->mes 14 ,'gaz' => $row->gaz 15 ,'dat' => $row->dat 16 ); 17} 18 19echo json_encode($users); 20?>
一応js側
js
1$.ajax({ 2 type: "POST", 3 data: "gallery2.php", 4 dataType: "json", 5 crossDomain: false, 6 scriptCharset: "UTF-8", 7 cache: false 8}).done(function(data) { 9 //console.log(data); 10 console.log($.parseJSON(data)); 11}).fail(function(XMLHttpRequest, textStatus, errorThrown) { 12 alert('Error : ' + errorThrown); 13});
###補足情報(言語/FW/ツール等のバージョンなど)
PHP 5.6.31
jquery-2.1.1
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/09 10:30
2017/09/09 10:41
2017/09/09 12:58
2017/09/09 13:30
2017/09/09 14:56
2017/09/09 15:43
2017/09/09 16:18
2017/09/10 07:58
2017/09/10 08:23
2017/09/10 08:43
2017/09/10 09:37