![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
関数内の配列を関数外で使うにはどのような方法がありますか?
実際には以下のものです。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dt …
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>Google AJAX Feed API テスト</title>
<meta http-equiv="content-script-type" content="text/javascript" />
<script type="text/javascript" src="http://www.google.com/jsapi?key=【キーコード】"></script>
<script type="text/javascript">
google.load("feeds", "1");
function initialize() {
var feed = new google.feeds.Feed("【RSSアドレス】");
feed.setNumEntries(5);
feed.load(function(result) {
if (!result.error) {
var container = document.getElementById("feed");
for (var i = 0; i < result.feed.entries.length; i++) {
var entry = result.feed.entries[i];
var dd = new Date(entry.publishedDate); // now
var yearNum = dd.getYear();
if (yearNum < 2000) yearNum += 1900;
var date = yearNum + "."+(dd.getMonth()+1)+"."+dd.getDate()+" ";
container.innerHTML += "<p>" + date +" <a href='" + entry.link + "' target='_blank'>" + entry.title + "</a></p>";
}
}
});
}
google.setOnLoadCallback(initialize);
</script>
</head>
<body>
<div id="feed"></div>
</body>
</html>
最後の方の、container.innerHTMLを使わず配列として
blogs.push(Date.parse(date),"<p>" + date +" <a href='" + entry.link + "' target='_blank'>" + entry.title + "</a></p>");
で、配列にpushして最後にdateでsortしたいのですが、どうでしょうか?
初心者なのでお手柔らかにお願いします!
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
ちなみにどんなエラーがでますか?
行数と、メッセージ、エラーの出た行に書かれたコードを教えて下さい。
出来れば書き直したスクリプトも公開して頂ければ助かります。
該当のGoogleのAPIは使った事無いのですが、
単純にクラス内部で渡した
Functionオブジェクトをコールしているだけだと思います。
この回答への補足
解決してしまったのでご報告いたします。
原因は、
読込が非同期だったのでblogs.sort以下が先に実行され
中身が空っぽだったみたいです。
解決方法は、
非同期のfor()で読込数をカウントして
カウントが0になったらblogs.sort以下を呼び出すように
変更したところ上手くいきました。
afganhound様や、ほか回答してくださった方、ありがとうございました。
何度も、回答ありがとうございます。
以下が今のコードです。
尚、エラーはでていません。Firebugで確認するところ、blogsの中が空っぽでデータが表示されないだけみたいです。
恐れ入りますが、よろしくお願いします。
<script language="Javascript" type="text/javascript">
google.load('feeds', '1');
var blogs = Array();
function feeds_init()
{
var rss = new Array(
'http://dailynews.yahoo.co.jp/fc/rss.xml',
'http://dailynews.yahoo.co.jp/fc/computer/rss.xml',
'http://dailynews.yahoo.co.jp/fc/science/rss.xml',
'http://dailynews.yahoo.co.jp/fc/entertainment/rs …
);
var rssNum = rss.length + 1;
var container = document.getElementById('feedControl');
for(var f = 0; f < rssNum ; f++)
{
var feed = new google.feeds.Feed(rss[f]);
feed.setNumEntries(1);
feed.load(function(result) {
if (!result.error) {
var text = '';
var entries = '';
for (var i = 0; i < result.feed.entries.length; i++) {
var entry = result.feed.entries[i];
text+= '<span>' + entry.title + '</span>';
text+= '<span>' + entry.publishedDate + '</span>';
text+= '<span>' + entry.contentSnippet + '</span>';
entries+= '<div><a href="' + entry.link + '">' + text + '</a></div>';
var entryTime = Date.parse(entry.publishedDate);
}
blogs.push(new entryData(entryTime, '<div><p>' + result.feed.title + '</p>' + entries + '</div>'));
}
});
}
//console.log(blogs);
blogs.sort(cmp_data);
for (var i = 0; i < blogs.length; ++i) {
container.innerHTML+= blogs[i].data;
}
function entryData(date, data)
{
this.date = date;
this.data = data;
}
function cmp_data(a, b)
{
return b[0] - a[0];
}
}
google.setOnLoadCallback(feeds_init);
</script>
ボディに以下。
<div id="feedControl">Loading...</div>
No.3
- 回答日時:
失礼しました。
var a = array();
ではなく
var a = Array();
でした。
一応全文載せます
<script type="text/javascript">
var a = Array();
function b(){
a[0] = "sample";
}
b();
alert(a[0]);
</script>
window[変数名]での使用方法は以下のようにすればOKです。
<script type="text/javascript">
function b(){
var a = Array();
a[0] = "sample";
window["ary"] = a;
}
b();
alert(ary[0]);
</script>
回答ありがとうございます。
両方でやってみましたが、上手くいきませんでした。
blogs.pushをしてるのがGoogleのクラスの中だから外で反映しないのでしょうか?
feed.load(function(result) {~blogs.push();~}
何度もすみません。orz
No.2
- 回答日時:
1の方の補足ですが。
var a = array();
function b(){
a[0] = "sample";
}
b();
alert(a[0]); // "sample"
要するにfunction b(){}の外で
var a = array()
を宣言すれば、bの中でも外でも使えます。
外で宣言できない場合は、
・returnで配列を返す。
もしくは
・window["配列名"] = 配列;
とすると、使えます。(確か)
回答ありがとうございます。
はい、グローバル変数にしても駄目でした。
ちなみに、var a = array();だと
array is not definedになりました。
window["配列名"] = 配列;の場合
どのように呼び出すのでしょうか?
「window.配列名」ですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript GoogleChart 階層ごとのブロックの長さを個別に設定したい 1 2022/07/06 14:27
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perlの配列をJavaScriptに渡せ...
-
javascriptを用いて作成された...
-
同じIDで定義した要素の配列を...
-
どうすればresponseText結果を...
-
jspからjavascriptの変数引継ぎ
-
javascript 変数名の連結をしたい
-
フォーム入力値の重複チェック
-
配列に格納した値が保存されない
-
Wikipedia APIの結果からタイト...
-
JavaScriptでソートすることは...
-
gas 配列の開始番号
-
配列変数に重複のないランダム...
-
既存オブジェクトに対するプロ...
-
C#テキストボックスの文字を配...
-
サブウインドウから親ウインド...
-
関数でy=g(x)のgとは何の略です...
-
flickrのAPIを用い、任意の写真...
-
/*@cc_on@*/
-
文字色の変化
-
JavaScriptとcookieを利用して...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
同じIDで定義した要素の配列を...
-
C#テキストボックスの文字を配...
-
jspからjavascriptの変数引継ぎ
-
javascript 変数名の連結をしたい
-
二次元配列を使って順位をだす...
-
React hooksが値を返して配列変...
-
undefinedを表示させない方法は...
-
フォーム入力値の重複チェック
-
javascriptで行を抽出したいです。
-
JavaScriptでの動的な多次元配...
-
多次元配列から最大値を1行また...
-
HTMLで誕生石と星座をアラート...
-
JSONデータを50音順でソートしたい
-
重複しないようにランダムで表...
-
1から20までの整数から、重複な...
-
JavaScriptにおける[] とか :...
-
gas 配列
-
【JavaScript】オブジェクト型...
-
WSH(Jscript)でファイル一覧
-
JavaScriptで簡単なクイズを作...
おすすめ情報