お世話になっております
IPアドレスをアプリへのアクセスの記録として保存しようと考えております
IPアドレスの取得方法をネットの記事を参考に作ってみたのですが
JQueryで記載しております
1と2のwindow alertでは表示されるのですが、3では表示されません
関数の外の変数に値を渡すにはどのようにすればよろしいでしょうか
また、JQueryなどのライブラリはKintoneシステム管理で設定すれば全アプリで使用できるのでしょうか
宜しくお願い致します
(function($) {
“use strict”;
kintone.events.on(‘app.record.index.show’, function(event) {
var IP_Address;
$.get(“https://ipinfo.io”, function(res) {
//1
window.alert(res.ip);
IP_Address = res.ip;
//2
window.alert(IP_Address);
}, “jsonp”);
//3
window.alert(IP_Address);
});
})(jQuery);
こんにちは!
ipアドレスを取得している間に、プログラム自体は進んでしまって先に3が実行されているのだと思います。
私がjQueryあんまり分からないので書き方はわからないですが、
「非同期処理」というキーワードも一緒に検索されてみるとなにか見つかるのではないかと思います。
JavaScriptだとthenメソッドチェーン使ったり、await/asyncを使ったりすると大丈夫なやつです。
それと、kintoneシステム管理でjQueryなどライブラリを設定しておけば全アプリで使えます。
juridonさんご指摘の通り、JSの非同期処理のため、先に3が実行されてしまっている状況です。
おそらく「undefined」が最初に表示されているのではないでしょうか。
jQueryを使用せずとも以下の方法で簡単に記述することが出来るので参考にしてみてください。
(() => {
"use strict";
kintone.events.on('app.record.index.show', async (event) => {
const response = await kintone.proxy('https://ipinfo.io/json','GET',{},{})
const ipAddress = JSON.parse(response[0]).ip;
window.alert(ipAddress);
});
})();