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

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

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

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

jQuery

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

Ajax

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

Q&A

解決済

3回答

13879閲覧

ajaxを操作する関数の戻り値がundefinedになってしまう。

syosinnsyanopuh

総合スコア20

PHP

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

jQuery

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

Ajax

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

0グッド

0クリップ

投稿2019/01/14 12:42

編集2019/01/14 13:01

前提・実現したいこと

現在、js/php.sqlを使用して、webアプリを作成しているものです。
初心者的な質問かもしれませんが、ajaxを操作する関数を作り、その関数の戻り値をほかで取得しようとするのですが、どうしてもundefinedになって取得できません。
どなたか取得方法をご教授ください。

該当のソースコード

下記の関数を作り、returnにphpから受けた戻り値をセットします。

function sample(samNo,samNo2) {   var prm = { samNo:samNo, samNo2:samNo2}; $.ajax({     url: './api/sample.php', type: 'POST', cache: false, dataType: 'json', data: prm, async: false, success: function(o) {  //phpからの値を取得。 if (o.status != 0) { alert(o.message); return false; } alert(o.data['hoge']); //呼び出し元でこのアラートは出ます。 return o.data['hoge']; //これがどうしても渡せないです。 }, error: function(xhr, textStatus, errorThrown) { alert("ajax Error!!!\n" + textStatus + ' ' + errorThrown); return false; } }) }

この関数を実行

alert(sample(samNo,samNo2)); //undefinedになる(関数内のアラートは表示される)。

試したこと

asyncをfalseは試したのですが・・・。

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

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

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

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

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

m.ts10806

2019/01/15 01:07

詳細追記願います. > 呼び出し元でこのアラートは出ます。 何がでますか? > この関数を実行 samNo,samNo2に何が入っているのかこれではわかりません。 >if (o.status != 0) { そもそもconsole.log(o); とした際にコンソールには何が出力されますか?
guest

回答3

0

async/awaitの出番だとは思いますが、下記記事にやり方が書いてあります。

【jQueryのajax()を利用すると返り値をとりたいときのやり方 - Qiita】
https://qiita.com/katsukii/items/bd64efcf4f070d77c028#その1同期通信にする

async: falseとすると、同期通信になる。 ただし同期通信の場合は時間がかかる処理をすると、その間UIがロックされてしまう。なのであまりやらない方がいい。

js

1function test(){ 2 var result = $.ajax({ 3 type: 'GET', 4 url: 'http://kitagawa.keiko', 5 async: false 6 }).responseText; 7 return result; 8} 9var result = test() //ちゃんと返り値が入ってる;

【async function | MDN】
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/async_function

【async/await 入門(JavaScript) - Qiita】
https://qiita.com/soarflat/items/1a9613e023200bbebcb3

投稿2019/01/14 15:19

kei344

総合スコア69400

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

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

syosinnsyanopuh

2019/01/14 23:11

回答ありがとうございます。 試してみます。
syosinnsyanopuh

2019/01/14 23:21

async/waitの構文を読んでみたのですが、わたくし、初心者レベルでいまいち意味が分かりません。 私が書きたい上記のプログラムであれば、どのように記述したらよろしいのでしょうか???
m.ts10806

2019/01/15 00:40

質問者さん 細かいですが「async/await 」ですね(waitではありません) ajaxのasyncオプションは通信を同期か非同期かを決める設定なのでasync/awaitとはまた別の概念です。
guest

0

ベストアンサー

基本を誤解していると思います

$.ajaxのsuccessやdoneのコールバックでreturnが返すのは
$.ajax自体でありその親のfunctionは関係ない
そして$.ajaxが返すのはjQueryのajaxオブジェクト
つまりこういう参照になります

  • test.html

javascript

1<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 2<script> 3$(function(){ 4 var hoge=test(10,20); 5 console.log(hoge); 6 hoge["datas"].done(function(data){ 7 console.log(data); 8 }); 9}); 10function test(arg1,arg2){ 11 return { 12 samNo:arg1, 13 samNo2:arg2, 14 datas:$.ajax({ 15 url:"test.json", 16 dataType:"json", 17 }).done(function(data){ 18 return data; 19 })}; 20} 21</script>
  • test.json

json

1{"a":1,"b":2}

投稿2019/01/15 03:18

yambejp

総合スコア114775

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

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

syosinnsyanopuh

2019/01/15 12:44

皆様ご親切にありがとうございます。 私の職場の詳しい者に確認を取った結果、php側で処理することにより、 私のしたいことが実現いたしました。 問題提起も、解決の結果も中途半端になり、大変申し訳ありませんでした。
guest

0

js

1function sample(samNo,samNo2) { 2 var prm = { 3 samNo:samNo, 4 samNo2:samNo2 5 }; 6 // 返り値を一時的に保存 7 var ajax = $.ajax({ 8 url: './api/sample.php', 9 type: 'POST', 10 cache: false, 11 dataType: 'json', 12 data: prm, 13 async: false, 14 success: function(o) { 15 if (o.status != 0) { 16 alert(o.message); 17 return false; 18 } 19 alert(o.data['hoge']); 20 return o.data['hoge']; 21 }, 22 error: function(xhr, textStatus, errorThrown) { 23 alert("ajax Error!!!\n" + textStatus + ' ' + errorThrown); 24 return false; 25 } 26 }); 27 // 関数の返り値としてもreturn 28 return ajax; 29}

このようにすれば、動作すると思います。

この方法では動作しません。
以下のようにする必要があります。

js

1function sample(samNo,samNo2) { 2 var prm = { 3 samNo:samNo, 4 samNo2:samNo2 5 }; 6 var ajax = $.ajax({ 7 url: './api/sample.php', 8 type: 'POST', 9 cache: false, 10 dataType: 'json', 11 data: prm, 12 async: false 13 }); 14 return ajax; 15} 16function success(o) { 17 if (o.status != 0) { 18 alert(o.message); 19 return false; 20 } 21 alert(o.data['hoge']); 22 return o.data['hoge']; 23} 24 25var sample = sample(1, 2); 26success(sample.responseJSON);

投稿2019/01/14 12:58

編集2019/01/15 12:00
noka_blank

総合スコア252

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

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

syosinnsyanopuh

2019/01/14 13:00

回答ありがとうございます。 質問欄のソースが間違ってました。 returnの後'hoge'になってます。
syosinnsyanopuh

2019/01/14 13:01

質問欄のソースなおしました。 ご指摘ありがとうございます。
noka_blank

2019/01/14 15:19

修正ありがとうございます。 被疑箇所を改め、回答を修正しました。
syosinnsyanopuh

2019/01/14 22:59

回答ありがとうございます。 一時的にajaxという名の変数に格納し、 ajaxを返してみたのですが、動きません。
noka_blank

2019/01/15 12:00 編集

他の方が回答されている通り、自分の回答は間違っていました。 誤解を招く恐れがありますので、回答は修正しておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問