質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1185閲覧

Ajax通信でphpにリクエストをかけCSVファイルの内容をJSON形式でやり取りしたい

UpaZiro

総合スコア17

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/02/12 17:39

編集2021/02/12 23:46

前提・実現したいこと

ajaxでphpにリクエストをかけCSVファイルの内容をJSON形式でやり取りしたいのですがうまくいきません。

発生している問題・エラーメッセージ

SyntaxError: Unexpected token < in JSON at position 0
…とアラートで表示されます

該当のソースコード

PHP

1//json_encode.php 2 3//------------------------------------------------------------ 4//●改行を消す 5//------------------------------------------------------------ 6function indention($str){ 7 $str = str_replace("\n","",$str); 8 $str = str_replace("\r","",$str); 9 return $str; 10} 11 12//------------------------------------------------------------ 13//●配列の中身に該当するデータがあれば該当する件数を返す。 14//1件以上ある場合「件数」。0件の場合falseを返す。 15//------------------------------------------------------------ 16 17function searchData($array,$column_num,$serch_ward){ 18 $hit = 0; 19 foreach($array as $value){ 20 if($value[$column_num] == $serch_ward){ 21 $hit++; 22 } 23 } 24 return $hit > 0 ? $hit : false ; 25} 26 27//------------------------------------------------------------ 28//●CSVファイルを読み込む 29//------------------------------------------------------------ 30 31function open_csv($pass){ 32 $fp = fopen($pass,'r'); 33 $value = fgets($fp); 34 $member = []; 35 $flag = 0; 36 37 while($value !== false){ 38 $flag = 1; 39 $member[] = explode(",",$value); 40 $value = fgets($fp); 41 } 42 fclose($fp); 43 44 return $member; 45} 46 47//※「select_num.txt」には1桁の数字が記述されています。 48$fp = fopen('./data/select_num.txt','r'); 49$select_num = fgets($fp); 50fclose($fp); 51 52$select_num = indention($select_num); 53 54//CSVファイルを開く 55$all_question_child = open_csv('./data/question_child.csv'); 56$all_question_parent = open_csv('./data/question_parent.csv'); 57//該当する問題データの抽出 58$question_child = get_array_by_search($all_question_child,1,$select_num); //◎第三引数 59$question_parent = get_array_by_search($all_question_parent,0,$select_num); //◎第三引数 60 61echo json_encode([$question_parent,$question_child]);

ちなみに以下のような記述ならばajax通信が行われ、コンソールログに値が格納されていました。

PHP

1$data = [ 2 [1,"ふじ山","110","./../movie/quiz_01.mp4","5","./../img/quiz_icon01.png"], 3 [2,"あべのハルカス","1111111","./../movie/quiz_02.mp4","10","./../img/quiz_icon02.png"], 4 [3,"ほうりゅう寺","111110","./../movie/quiz_03.mp4","15","./../img/quiz_icon03.png"], 5 [4,"かんとう平野","111100","./../movie/quiz_04.mp4","20","./../img/quiz_icon04.png"], 6 [5,"おきのとり島","111110","./../movie/quiz_05.mp4","40","./../img/quiz_icon05.png"], 7 [6,"くろべ峡谷","11100","./../movie/quiz_06.mp4","60","./../img/quiz_icon06.png"], 8 [7,"たざわ湖","1110","./../movie/quiz_07.mp4","100","./../img/quiz_icon07.png"] 9 ]; 10 11 echo json_encode($data);

JavaScript

1$(function(){ 2 $.ajax({ 3 type: "POST", 4 url: "./../php/json_encode.php", 5 dataType : "json" 6 }).done(function(data){ 7 console.log(data); 8 }).fail(function(XMLHttpRequest, textStatus, error){ 9 alert(error); 10 }); 11});

ファイルの階層は以下の通りです…!

イメージ説明

試したこと

・「JSからの相対パス」や「Ajaxの記述されたJSを読み込むHTMLからの相対パス」もどちらもURLに打ち込んでみましたが失敗しました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hentaiman

2021/02/12 17:50

エラーになった時に通信失敗アラート表示するようにしているからエラーじゃないように見えるだけで実際はエラーです。 php側とjs側双方でログを出力し通信内容を確認しましょう
UpaZiro

2021/02/12 17:53

ありがとうございます。確認します。
UpaZiro

2021/02/12 17:54

あ…「ログを出力する」…というと具体的にどのようなことを行えばよいのでしょうか?
hentaiman

2021/02/12 17:57

php側は ・エラーログを見る ・display_errorsをOnにする ・そもそも構文エラーじゃないかチェックする js側は開発者ツール開けばコンソールタブにエラーが表示される、それからネットワークタブを見る > }).fail(function(data){ のdataをconsole.logとかで表示しても良い
UpaZiro

2021/02/12 18:13

共に、それぞれブラウザ作動させたのですが特にエラーメッセージは出てないんですよね…。PHP側はJSON形式にエンコードされた配列がechoで問題なく出力されており、JS側もコンソールにエラーメッセージは見当たりません(Chromeのコンソールで確認しています)。 ちなみに、相対パスはこの場合、どこを起点にした記述をすればいいのでしょうか?
hoshi-takanori

2021/02/12 19:57

php 側で json を 2 回出力するのはおかしいのでは。
m.ts10806

2021/02/12 20:35

コメント見る前に回答してしまった。 hoshi-takanoriさんの指摘道理でしょうね。
UpaZiro

2021/02/12 23:47

ありがとうございます! 書き方を変えてみましたが直りませんでした…泣 少し色々模索してみて質問内容を編集してみました。 なにか手がかりがありましたら教えてください…!
guest

回答1

0

ベストアンサー

エラーを表示させてないので出てないように見えるだけでは。
fail()は3つ引数を受け取れます。

[

jQuery.ajax()](https://api.jquery.com/jquery.ajax/)
・jqXHR.fail(function( jqXHR, textStatus, errorThrown ) {});

学習時期、開発途中ではすべてconsole.log()で出しておいても損はありません。
デバッグですね。

おそらく、原因は下記

echo json_encode($question_child);

echo json_encode($question_parent);

これではJSON形式として正しい文字列とはなりません。
dataTypeが期待する形になっていないというわけです。

php

1<?php 2$question_child = []; 3$question_parent = []; 4echo json_encode($question_child); 5echo json_encode($question_parent);

[][]

どういう形のデータを欲しいのかはわかりませんが、
doneに返したいだけならこうかな。

php

1echo json_encode([$question_child,$question_parent]);

投稿2021/02/12 20:34

m.ts10806

総合スコア80861

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

UpaZiro

2021/02/12 23:50

ありがとうございます! 直りませんでした…(-_-;) 配列をjson_encode.phpで直接入力し、エンコードしたものはエラーなく受け取れていたのでPHP側に問題があるのかな…と思ったのですがわかりません。 ファイルの階層や書き換えた内容を質問編集で書いておきました。 なにか糸口があれば教えてください…(-_-;)
m.ts10806

2021/02/13 00:12 編集

「直るかどうか」はそもそも「どういう出力にしたいか」というのを知ってないと判断できません。 質問内容に書いてないのでわかりません。 また、「SyntaxError: Unexpected token < in JSON at position 0」 は結局JSON形式として解釈できない文字列の場合に出るものです。 コード見た感じ、何もPOST送信してないようですし type: "POST", ↓ type: "GET", にしたうえで、ブラウザから直接URLを実行してみてください。 何か別のものが混じってるはずです。 結局デバッグするしかないですね。 txtの内容もこちらにはわかりませんし。
UpaZiro

2021/02/13 01:34

phpの方で書き換えた際にエラーが起きていました! なおしたらコンソールに配列の内容が出てきました! ありがとうございました!
m.ts10806

2021/02/13 01:52

単体でデバッグするようにしてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問