備忘です
わたしの使用用途
(追記)
フロントエンドのHTML,JS等を適当なホスティングサービスにおいて、GAS(Google App Script)からJSONでデータをもらいたい。(ドメインを揃えれば良いじゃない、という指摘は我慢してください)
特徴
JSON P のためドメインの違うサイトからデータを取得できます。
- タイムアウト検知処理
- 一定時間、サーバから応答が無い場合を検知できる
コード
// JSONPでアクセスする関数
function accessByJSONP(url, errfunc) {
var key = createUniqueStr();
console.log(" key created by AccessSuccessCheckList [" + key + "]");
var script = document.createElement("script");
script.src = url + "&key=" + key; //一意となるkeyを勝手に追加
document.head.appendChild(script);
AccessSuccessCheckList[key] = url;
script.onerror = function (e) {
console.log(" Error on accessByJSONP");
errfunc();
};
//呼び出しタイムアウトした場合の処理
window.setTimeout(function (e) {
if (accessSuccessCheck(key)) {
console.log(" access Timeout key is cleared. " + key);
}
else {
console.log(" Err access Timeout key [" + key + "]");
var url_1 = accessSuccessURL(key);
console.log(" URL " + url_1);
//errfunc();
}
}, 30000); //タイムアウト待ち30秒
//↓関数である必要はない。。。
function accessSuccessURL(key) {
return AccessSuccessCheckList[key];
}
function accessSuccessCheck(key) {
if (AccessSuccessCheckList[key]) {
return false;
}
else {
return true;
}
}
function createUniqueStr(myStrong) {
//let strong = 1000;//copy元
var strong = 100;
if (myStrong)
strong = myStrong;
return ("k" + new Date().getTime().toString(16) +
Math.floor(strong * Math.random()).toString(16));
}
}
グローバル変数で、タイムアウト待ちリストを保持
// JSONPでアクセス中のリスト
// レスポンスタイムアウトをチェックする
var AccessSuccessCheckList = {};
コールバック関数で、タイムアウト待ちを解除する
// keyはcallbackとしてサーバから返してもらうこと
function callback(data, key) {
AccessSuccessCheckList[key] = null;
}
github