関数で取得した値を、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に渡したいです。。。
何卒、よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー