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

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

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

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

Ajax

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

Q&A

解決済

2回答

595閲覧

連想配列からデータが取得できません。

WebFirster

総合スコア3

JavaScript

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

Ajax

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

0グッド

0クリップ

投稿2022/05/13 04:06

AJAXを利用してDBからデータを取得しています。
サーバーからデータは取得していることはブラウザー(Egde)のデバッガーで確かめていますが、なぜか連想配列からデータが取得できません。
初歩的なミスによるものと思いますが、ご教授お願いします。

問題のコードは以下のコードです。

<head> <script src="http://code.jquery.com/jquery-3.2.1.min.js"></script> <script type="text/javascript"> $(function() { // 顧客IDに既存のデータを入力した場合はAjaxで既存データ取り出し $('button[name="save"]').click(function(){ var code = "XXXXX12345" ; $.ajax({ type: "POST", url: "dbget.php", data: {"dataid": code} , crossDomain: false, cashe: false , dataType : "json" , scriptCharaset : 'utf-8', timespan : 1000, success: function(result, textStatus, xhr) { var jsdata = JSON.stringify(xhr) ; var cvdata = JSON.parse(jsdata); var data_res = cvdata["nextid"] ; $("#result").text("[" + data_res + "]") ; }, }).fail(function(XMLHttpRequest, textStatus, errorThrown){ alert(XMLHttpRequest + " " + textStatus + errorThrown) ; }) ; }); }); </script> </head> <body> <button type="button" name="save" >登 録</button> <div id="result"></div> </body>

表示したボタンを押すと、サーバーのDBの問い合わせ結果を受け取って、一部の項目を表示する簡単なサンプルプログラムです。
しかし、結果をどうやっても"[undefined]"と表示されてしまいます。

トレースすると、”successの3つ目のパラメータ xhrにはデータが記録されており、以後、jsdata, cvdataまでは入っていることは確認しています。しかし、data_resではどうしても”undefined"になります。

念のため、呼び出し側を以下のように固定値に変更しても同じでした。

<?php  $json = file_get_contents("php://input") ; // POSTデータ受け取り受け取り parse_str($json, $contents); $contents = json_decode($json, true) ; echo json_encode( array( "result" => "Passed")); ?>

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

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

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

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

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

hoshi-takanori

2022/05/13 04:21

jsdata にはどのような JSON が返るのでしょうか?
guest

回答2

0

まずはデバッグのため
dataType : "json" →dataType : "text"
とします
successは古い書き方なのでdoneで受けます

javascript

1$.ajax({・・・・}).done(function(data){ 2 console.log(data); 3})fail(functiion(xhr,err){ 4 console.log(err); 5})

おそらくPHP側でエラーになっているのでしょう

投稿2022/05/13 04:25

yambejp

総合スコア114775

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

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

WebFirster

2022/05/13 04:29

回答ありがとうございます。最初は”done"で作成していたのですが、これを使用していた時に正常に動かないことがあり、サンプルプログラムを作成して原因を調査しているときに、古いほうで記述した次第です。もっとも、古い新しいがわかりませんが・・・。
guest

0

ベストアンサー

質問にある以下のコードは、はっきり言ってメチャクチャで、何をしたいのか分かりませんが、

success: function(result, textStatus, xhr) { var jsdata = JSON.stringify(xhr) ; var cvdata = JSON.parse(jsdata); var data_res = cvdata["nextid"] ; $("#result").text("[" + data_res + "]") ; },

サーバーから期待した通り JSON 文字列が返ってきているのであれば、上のコードの function の引数 result には JSON 文字列をデシリアライズした JavaScript オブジェクト(連想配列)が代入されるはずなので、それから求めるものが得られると思いますけど。

投稿2022/05/13 04:15

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

WebFirster

2022/05/13 04:26

修正依頼となっていますが、こちらとしては回答と受け止めます。ただ、参照すべき引数が3つ目の"xhr"でなくて、”result"なのですね。
退会済みユーザー

退会済みユーザー

2022/05/13 04:52

> 修正依頼となっていますが、こちらとしては回答と受け止めます。 修正依頼? 何のことですか? 私は回答欄にしか書いていません。回答欄に書いたので修正依頼ではなく回答です。 > ただ、参照すべき引数が3つ目の"xhr"でなくて、”result"なのですね。 ドキュメント https://api.jquery.com/jQuery.ajax/ を読むことをお勧めします。success の項目にサーバーから返されたデータは function の第 1 引数に代入されるということが書いてあります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問