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

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

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

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

JavaScript

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

jQuery

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

Q&A

解決済

1回答

1235閲覧

jquery 関数の戻り値が受け取れていない

mikeko0901

総合スコア227

PHP

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

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2020/06/20 09:25

編集2020/06/20 13:04

関数で取得した値を、returnで返し、関数の外で使用したいです。
そして、別のページにpostで渡したいです。しかしうまく行きません…
以下、コードです。

※LINE liffの開発です。
index.php

<!DOCTYPE html> <html lang="ja" prefix="og: http://ogp.me/ns#"> <head> 省略 </head> <body> <div id="wrapper"> <header> <nav class="navbar navbar-expand-sm bg-navbar navbar-brand justify-content-center"> <div id="header"> <div id="logo" class="navbar-logo"> <img src="../style/image/yadorigi_logo.PNG" class="logo-img"></a> </div> </div> </nav> </header> <div class="container"> <div class="h1title mt-4"> <h1>〇〇</h1> </div> <p id="browserIdToken"></p> <div> 「ご利用開始」ボタンをクリックすると、その時点から24時間、こちらのKEY OPEN SYSTEMをご利用いただけます。 </div> <div> <form method="post" action="open.php"> <div class="form-group row mt-4"> <label class="col-4 col-form-label text-right">オフィス:</label> <div class="col-8"> <select name="office" class="form-control" id="office"> <option value="大阪本町" selected>大阪本町office</option> </select> <input type="hidden" name="user_name" value="" id="user"> <input type="hidden" name="line_id" value="" id="id"> </div> <div class="col text-center mt-4"> <button id="button" class="btn btn-info">ご利用開始</button> </div> </div> </form> </div> </div> </div> <footer class="text-center pt-1 pb-1 small fixed-bottom"> 省略 </footer> <!-- liff用scriptを読み込む --> <script src="https://static.line-scdn.net/liff/edge/2/sdk.js"></script> <!--<script src="../style/liff.js"></script> --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script> <script> function getProfile(){ // https://developers.line.me/ja/reference/liff/#liffgetprofile() var obj2 = new Object(); var obj2 = liff.getProfile().then(function (profile) { var obj = new Object(); obj.userId = profile.userId; obj.userName = profile.displayName; alert ("★getProfile中のalert" + obj.userId); return obj; }); return obj2; } function displayLiffData() { const isInClient = liff.isInClient(); const isLoggedIn = liff.isLoggedIn(); if(isLoggedIn) { } else { window.alert("申し訳ございません、LINEのトークルームよりご利用くださいね。"); document.getElementById("button").style.display ="block"; } } window.addEventListener('load', function() { //初期化 liff.init({ liffId: "1654330436-BKj1ZRrQ"}).then(() => { getProfile(); displayLiffData(); }); }) //できない $('button').click(function() { var obj = getProfile(); alert ("clickのalert" + obj.userId); $('#user_name').val(obj.userName); //input type hiddenの値を書き換える $('#line_id').val(obj.userId); $('form').submit(); //formタグを指定 }) </script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script> <script defer src="https://use.fontawesome.com/releases/v5.2.0/js/all.js"></script> </body> </html>

index.phpを開いたら、//初期化 の処理を行います。この時、getProfile()が呼び出されて、userIdを取得します。
確認のために入れているalert ("★getProfile中のalert" + obj.userId);は、userIdがきちんと入った状態でalertされます。

「ご利用開始」ボタンをクリックすると、ページを読み込んだ時と同じように、userIdとuserNameを取得して、formのinput hiddenのvalueを書き換えて、postでopen.phpに渡したいのですが、
click function中のalert ("clickのalert" + obj.userId);では、undefinedと記載されて、userIdがalertされていません。ですので、当然、open.phpにもuserIdが渡っていません。

変数の受け渡し方法が誤っているのだと思いますが、どのようにすればよいか、アドバイスいただけますと幸いです。

★本当は、ページ読込の際に、userIdとuserNameがとれているので、
$('button').click(function()  では再度 getProfile関数を実行せずに、ページ読込の際に取得したuserIdとuserNameをopen.phpに渡したいです。。。

何卒、よろしくお願いいたします。

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

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

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

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

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

m.ts10806

2020/06/20 09:31

「初心者アイコン」を質問に付けられるのでそちらを利用してください。 タイトルや本文にわざわざ書く必要はありません。 あと、HTMLがだいぶ正しくないので(開始タグがないのに終了タグがあるとか)、そこを正さないとJavaScriptからの操作は正しくならないかと思います。
mikeko0901

2020/06/20 13:04

大変失礼しました。</div>が多かったのと、scriptの位置も誤っておりました。
guest

回答1

0

ベストアンサー

外側の変数に渡しておけば良いような。

js

1 var my_profile = {}; // 初期値が必要なら入れておく { userId: '', userName: '' } 2 function getProfile(){ 3 // https://developers.line.me/ja/reference/liff/#liffgetprofile() 4 // var obj2 = new Object(); // ← 特に意味の無い記述なので何をしたいのか不明 5 var obj2 = liff.getProfile().then(function (profile) { 6 my_profile.userId = profile.userId; 7 my_profile.userName = profile.displayName; 8 // var obj = new Object(); 9 // obj.userId = profile.userId; 10 // obj.userName = profile.displayName; 11 12 // alert ("★getProfile中のalert" + obj.userId); 13 14 // return obj; 15 }); 16 17 return obj2; 18 }

投稿2020/06/20 10:52

kei344

総合スコア69458

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

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

mikeko0901

2020/06/20 13:12

ありがとうございます!できました! 外側に出せばreturnもなくても大丈夫でしたので、以下で問題なく受け渡せました。ありがとうございます。 ``` <script> var my_profile = { userId: '', userName: '' }; function getProfile(){ // https://developers.line.me/ja/reference/liff/#liffgetprofile() liff.getProfile().then(function (profile) { my_profile.userId = profile.userId; my_profile.userName = profile.displayName; }); } function displayLiffData() { const isInClient = liff.isInClient(); const isLoggedIn = liff.isLoggedIn(); if(isLoggedIn) { } else { window.alert("申し訳ございません、LINEのトークルームよりご利用くださいね。"); document.getElementById("button").style.display ="block"; } } window.addEventListener('load', function() { //初期化 liff.init({ liffId: "1654330436-BKj1ZRrQ"}).then(() => { getProfile(); displayLiffData(); }); }) //できた! $('button').click(function() { alert ("clickのalert" + my_profile.userId); alert ("clickのalert" + my_profile.userName); $('#user').val(my_profile.userName); //input type hiddenの値を書き換える $('#id').val(my_profile.userId); $('form').submit(); //formタグを指定 }) </script> ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問