ここから本文です

htmlとphp(サーバー側)間で、簡単なデータのやりとりをするプログラムを作ってい...

jyo********さん

2016/9/612:00:44

htmlとphp(サーバー側)間で、簡単なデータのやりとりをするプログラムを作っていますが、つまづいています。

html(ajax):
$.ajax({
type:"GET",
url:"select_res.php",
dataType:"json"
})
.d

one(function(data){
alert("通信が成功しました。");
})
.fail(function(xhr,status,error){
$(".err_log").append("xhr.status = " + xhr.status + "<br>"); // 例: 404
$(".err_log").append("xhr.statusText = " + xhr.statusText + "<br>"); // 例: Not Found
$(".err_log").append("status = " + status + "<br>"); // 例: error
$(".err_log").append("error = " + error + "<br>"); // 例: Not Found
})
.always(function(data){
alert("通信が完了しました。");
});

php(select_res.php):
<?php
//データベースに接続
require_once(dirname(__FILE__).'/module/DBConnect.php');
$dbh=db_connection();
try{
//insert文を変数に格納
$sql='select * from tbl_mybbs order by date_mybbs';
//挿入する値は空のまま、SQL実行の準備をする
$stmt=$dbh->query('SET NAMES utf8;');//文字化け対策
$stmt=$dbh->prepare($sql);
//SQLを実行
$stmt->execute();
$dataArr=array();
while($res=$stmt->fetchObject()){
$dataArr[]=array(
'date'=>$res->date_mybbs,
'name'=>$res->name_mybbs,
'res'=>$res->res_mybbs
);
}
header('Content-Type: application/json');
echo json_encode($dataArr);
}catch(PDOException $e){
//エラー発生して例外が投げられたら、ロールバックする
$dbh->rollback();
print('エラー発生:'.$e->getMessage());
}
$dbh=null;
?>

htmlを実行すると、自動的にデータをphpより取得するハズなのですが

xhr.status = 200
xhr.statusText = OK
status = parsererror
error = SyntaxError: Unexpected token in JSON at position 0

のエラーで出て、通信エラーとなります。
色々試してみたのですが、一向に解決できません。皆さまのお知恵をお貸しください。

ちなみに、上のソースは別の通信プログラムの流用なのですが、
そちらではエラーが出なくて通信できる状況で、同じプログラムで何故…と???となってる次第です。

閲覧数:
107
回答数:
2

違反報告

ベストアンサーに選ばれた回答

kur********さん

2016/9/612:09:18

SyntaxError: Unexpected token in JSON at position 0

となっていますので、phpの結果がJSON形式となっていないようです。

DBにアクセスするところでExceptionが発生して、print('エラー発生:'.$e->getMessage());
側に処理がながれているのではないでしょうか。

  • 質問者

    jyo********さん

    2016/9/612:39:12

    早速のご回答ありがとうございます。


    試しに、html側において

    dataType:"json"

    の一行を削除、
    done内に

    console.log(data);

    を追加。

    php側において

    header('Content-Type: application/json');
    echo json_encode($dataArr);

    を、

    var_dump(dataArr);

    に変更すると、通信は成功して作成した配列dataArrがコンソール
    にて確認できます。ので、データベースには接続出来ているようです。

    json_encode($dataArr)

    では、JSON形式になっていないのでしょうか?

  • その他の返信(4件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

ベストアンサー以外の回答

1〜1件/1件中

nao********さん

2016/9/617:12:10

「Doctrine Project」というサイトにあるORM(オブジェクトリレーショナルマッピング)ライブラリを使えば
http://www.doctrine-project.org/index.html

・マッピング情報(YAML形式)を元にデータベースの操作をしてくれる
・オブジェクト指向でデータの挿入・削除・更新ができる
・MySQL以外のデータベース(SQLite/PostgreSQL)に対応できる
・パフォーマンス性が高い
というメリットがあります。

Doctrineライブラリは公式サイトからダウンロードできますが、
Composer経由でダウンロードしてしまいましょう

http://getcomposer.org/ から「Download」のリンクをクリックし、Manual Downloadと書いてある場所で「Latest Snapshot」と書かれたリンクから「Composer.phar」をダウンロードしてphp.exe等があるところにファイルをおきます。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる