人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

javascriptでjsonデータを取得できたのですが
取得したデーターの下に「さらに読み込む」「read more」みたいなリンクがあり、クリックすると、遷移なしに下の方にpage=2、page=3のデータを取得していくにはどうすればいいでしょうか?

<script type="text/javascript"]]>
function show_posts_widget(root) {
var tags = "<ul>";
for (var i = 0; i < root.posts.length; i++) {
tags += '<li><a href="' + root.posts[i].url + '">' + root.posts[i].title + '</a></li'+'>';
}
tags += '</ul'+'>';
document.writeln(tags);
}
</script>

<script type="text/javascript" src="http://test.com/api/get_recent_posts/?callback=show_posts_widget&read_more=More&page=1"></script>

●質問者: shuheiok
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
●1000ポイント ベストアンサー

Wordpress の JSON API を使うということで良いんですよね?
ページ数や、取得した投稿数なども使ってます。

こんな感じでどうでしょうか。

<script type="text/javascript">
/*
 指定されたページの投稿を取得する
 */
function json_call(page) {
 var URL = "http://test.com/api/get_recent_posts/?callback=show_posts_widget&read_more=More&";
 var e = document.createElement("script")
 e.src = URL + "page=" + page;
 document.body.appendChild(e);
}

/*
 JSON 形式のデータから、投稿のリストを作成する。
 */
function show_posts_widget(root) {
 var tags = "<ul>";
 for (var i = 0; i < root.posts.length; i++) {
 tags += '<li><a href="' + root.posts[i].url + '">' + root.posts[i].title + '</a></li'+'>';
 }
 tags += "</ul>";

 var e = document.createElement("DIV");
 e.className = "posts";
 e.innerHTML = tags;
 document.body.appendChild(e);

 /*
 次の投稿を取得するリンク
 */
 if (root.count * root.pages < root.count_total) { // まだ投稿があるなら...

 e = document.createElement("A");
 e.href = "#";
 e.onclick = function() {
 // 次のページを読み込み
 var page = root.pages + 1;
 json_call(page);

 // ひとつ前のリンクは消しておく
 var me = this;
 me.parentNode.removeChild(me);

 return false;
 }
 e.innerHTML = "read more ...";
 document.body.appendChild(e);
 }
}

// 1ページ目を表示する
window.onload = function() {
 json_call(1);
 }
</script>

<style>
DIV.posts {
 border: 1px solid green;
}
</style>


<body>
</body>

取得したデータをリストにするのには、document.write ではなく innerHTML を使ってます。
何となくですが、<UL> を <DIV> で囲みました。
最後のページを取得したら、"read more ..." は表示しないようにしています。




追記です。

var page = root.pages + 1;のところで
root.pagesの値がずっと同じな為"read more ..." をクリックしても
ページ数が加算されず、ずっと同じページが表示されます。
pageを1加算していくのに
なにかいい代替方法はありますでしょうか?

http://wordpress.org/plugins/json-api/other_notes/#Method:-get_recent_posts
上記の Response の例を見ると、pages は増えていきそうな感じなんですけどね。

ちょっと、かっこ悪いんですが、最後に表示したページ番号を持つようにしたのがこちらです。

<script type="text/javascript">
// 最後に表示したページ
last_page = 1;

/*
 指定されたページの投稿を取得する
 */
function json_call(page) {
 var URL = "http://test.com/api/get_recent_posts/?callback=show_posts_widget&read_more=More&";
 URL = "http://localhost/cgi-bin/a.rb?callback=show_posts_widget&";
 var e = document.createElement("script");
 e.src = URL + "page=" + page;
 document.body.appendChild(e);
}

/*
 JSON 形式のデータから、投稿のリストを作成する。
 */
function show_posts_widget(root) {
 var tags = "<ul>";
 for (var i = 0; i < root.posts.length; i++) {
 tags += '<li><a href="' + root.posts[i].url + '">' + root.posts[i].title + '</a></li'+'>';
 }
 tags += "</ul>";

 var e = document.createElement("DIV");
 e.className = "posts";
 e.innerHTML = tags;
 document.body.appendChild(e);

 /*
 次の投稿を取得するリンク
 */
 if (root.count * root.pages < root.count_total) { // まだ投稿があるなら...

 e = document.createElement("A");
 e.href = "#";
 e.onclick = function() {
 // 次のページを読み込み
 last_page += 1;
 json_call(last_page);

 // ひとつ前のリンクは消しておく
 var me = this;
 me.parentNode.removeChild(me);

 return false;
 }
 e.innerHTML = "read more ...";
 document.body.appendChild(e);
 }
}

// 1ページ目を表示する
window.onload = function() {
 json_call(1);
 }
</script>

<style>
DIV.posts {
 border: 1px solid green;
}
</style>

a-kuma3さんのコメント
>> var page = root.pages + 1;のところで root.pagesの値がずっと同じな為"read more ..." をクリックしても ページ数が加算されず、ずっと同じページが表示されます。 pageを1加算していくのに なにかいい代替方法はありますでしょうか? << 回答に追記しました。

shuheiokさんのコメント
表示されました! ご丁寧な回答ありがとうございました。

質問者から

ありがとうございます。
var page = root.pages + 1;のところで
root.pagesの値がずっと同じな為"read more ..." をクリックしても
ページ数が加算されず、ずっと同じページが表示されます。
pageを1加算していくのに
なにかいい代替方法はありますでしょうか?


関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ