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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

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

Q&A

解決済

1回答

426閲覧

jqueryでAjaxを使い、PHPのJSON形式で送りたい

hima-mura.

総合スコア42

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

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

0グッド

1クリップ

投稿2022/06/22 11:20

編集2022/06/22 11:26
//sample.tpl <header> <meta charset="UTF-8"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> </header> <div class="try_ajax"> <h1>Ajaxお試し</h1> <p>IDを入力してください:<input type="text" id="main"><button id="send">送信</button></p> <div id="return"></div> </div> <script> $(function(){ $('#send').on('click',function(event){ var data_id= {ldelim}'id':$('#main').val(){rdelim}; // var data_id= {'id':$('#main').val()}と同意。 alert(data_id.id); // テイストボックスに打ち込んだ文字(japan1)が表示される。 $.ajax({ type: 'POST', url: url, data: data_id, dataType: 'json' }).done(function(data){ alert(data); $('#return').append('<p>'+data.id+':'+data.school+':'+data.skill+'</p>'); }).fail(function(XMLHttpRequest,status,e){ alert(e); }).always(function(){ alert('Finish Ajax.'); }) }) }) </script> // sample.php $id= $_POST['id']; // null を返す $ajax_list= array('id'=> $id, 'school'=> 'japan', 'skill'=> 'programming'); echo json_encode($ajax_list); // header('Content-type: application/json; charset=UTF-8');

Smartyのテンプレートで構成されているサイトに、初めてAjaxを使おうとし、試しの上記のコードを実行したら「SyntaxError: Unexpected token < in JSON at position 50」を吐きました。参考にしたサイトは,https://techacademy.jp/magazine/37062 。
になります。変数data_idはJSON形式であると思うのですが、どうしてこんなエラーを吐くかわかりません。あと、PHPの「header('Content-type: application/json; charset=UTF-8');」の部分を実行すると画面がhtmlのheaderのコード文字が表示され、UIが全く表示されなくなるのでなくなくコメントアウトしています。
試したことは、
・dataTypeを「'json'」から「'text'」に変更すると、done()部分が実行され、「alert(data)」の部分は「{"id":"japan1","school":"japan","skill":"programming"}<html>

<head><meta>...(以下略)」 になりました。また、「$('#return').append('<p>'+data.id+':'+data.school+':'+data.skill+'</p>');」のところは「undefined:undefined:undefined」と画面に表示されました。

・マニュアルにdataのTypeはPlainObject、String、Arrayとなっていたので、「var data_id= {ldelim}'id':$('#main').val(){rdelim}; 」を「var data_id=[ {ldelim}'id':$('#main').val(){rdelim}]; 」に変更しましたが、同じく「SyntaxError」を吐きました。
他の方の環境では問題なく動くのでしょうか?Smartyを使用しているのが参考サイト通りの挙動をしない原因なのでしょうか?助言をお願いします。

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

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

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

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

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

tabuu

2022/06/22 23:20

sample.phpはjsonをechoした後にhtmlを出力するようになっていませんか? もしくはphpのエラーで500エラー等のhtmlが自動で出力されていませんか?
hima-mura.

2022/06/23 04:43

大変申し訳なく意味を意図をかみ切れてないのですが、 echoでjsonをJSに送信した後にheader('Content-type: application/json; charset=UTF-8');を記述するとhtml部分のhead部分のコードが出力されるのですが、これって設定で出力を変えたりできるということですか?
tabuu

2022/06/23 05:20

echoしたあとにheader関数を使っているのでエラーになって500エラーのhtmlが自動で表示されているのかもしれません。 echoの前にheader関数を使ってみてください。(headerでContentTypeを変更しなくても問題ないとは思うのですが) ちなみにブラウザのurl欄にsample.phpのurlを入力するとどのように表示されますか? GETとPOSTの違いはありますが何かヒントになるかも。
guest

回答1

0

ベストアンサー

単純にサーバーからの戻り値がjson型じゃないのでエラーになっているのでしょう
「 dataType: 'json'」

エラー情報は「alert(status);」で確認してください
parsererrorとか返ってきているとおもいます。

jQueryに思い入れが強いわけではないならfetchに切り替えたほうが良いと思います
IEの呪縛がようやくなくなったことですしね

投稿2022/06/22 11:28

yambejp

総合スコア114769

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

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

hima-mura.

2022/06/23 04:46

確かにstatusの中身を確認してみたらparsererrorでした。これは,変数data_idは一度phpに送信済み(成功)で、phpからJSに返すときに型が異なるのでErrorを吐いてる(失敗)ということであってますか?
yambejp

2022/06/23 04:48

そうですね。dataTYpe:'text'で読めるということは、戻り値がjson型ではないという指標です
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問