dポイントプレゼントキャンペーン実施中!

関数内の配列を関数外で使うにはどのような方法がありますか?
実際には以下のものです。

<!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件)

ちなみにどんなエラーがでますか?


行数と、メッセージ、エラーの出た行に書かれたコードを教えて下さい。
出来れば書き直したスクリプトも公開して頂ければ助かります。

該当のGoogleのAPIは使った事無いのですが、
単純にクラス内部で渡した
Functionオブジェクトをコールしているだけだと思います。

この回答への補足

解決してしまったのでご報告いたします。

原因は、
読込が非同期だったのでblogs.sort以下が先に実行され
中身が空っぽだったみたいです。

解決方法は、
非同期のfor()で読込数をカウントして
カウントが0になったらblogs.sort以下を呼び出すように
変更したところ上手くいきました。

afganhound様や、ほか回答してくださった方、ありがとうございました。

補足日時:2008/06/18 09:24
    • good
    • 0
この回答へのお礼

何度も、回答ありがとうございます。
以下が今のコードです。
尚、エラーはでていません。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>

お礼日時:2008/06/17 21:54

失礼しました。



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>
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
両方でやってみましたが、上手くいきませんでした。

blogs.pushをしてるのがGoogleのクラスの中だから外で反映しないのでしょうか?
feed.load(function(result) {~blogs.push();~}
何度もすみません。orz

お礼日時:2008/06/17 17:46

1の方の補足ですが。



var a = array();

function b(){
a[0] = "sample";
}
b();
alert(a[0]); // "sample"

要するにfunction b(){}の外で
var a = array()
を宣言すれば、bの中でも外でも使えます。

外で宣言できない場合は、
・returnで配列を返す。
もしくは
・window["配列名"] = 配列;
とすると、使えます。(確か)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

はい、グローバル変数にしても駄目でした。
ちなみに、var a = array();だと
array is not definedになりました。

window["配列名"] = 配列;の場合
どのように呼び出すのでしょうか?
「window.配列名」ですか?

お礼日時:2008/06/17 16:31

関数の外で変数を宣言すれば、どこでも

    • good
    • 0
この回答へのお礼

回答ありがとうございます。

それは分かるのですが、上手くいきません。
原因がさっぱりです。どうしたものか。。。

お礼日時:2008/06/17 16:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!