IE9以下でajaxを使用した際に、データをうまく取得できなかったので、その対応方法をメモ。
サンプルコード
HTML
<div id="sample"></div>
JavaScript
$(function() {
$.ajax({
type : 'GET',
url: './get.php',
dataType: 'xml',
success: function(data) {
// 取得件数
var getCount = 5;
if ($('item', data).length < getCount) {
getCount = data.length;
};
var insert = '';
insert += '<h1>';
// リンク先の挿入
insert += '<a href="' + $('channel', data).children('link').text() + '">';
// タイトルの挿入
insert += $('channel', data).children('title').text();
insert += '</a>';
insert += '</h1>';
insert += '<ul>';
for (var i = 0; i < getCount; i++) {
var thisItem = $('channel', data).children('item').eq(i);
insert += '<li>';
// 日時の挿入
insert += '<p class="pubDate">';
insert += thisItem.children('pubDate').text();
insert += '</p>';
// タイトルの挿入
insert += '<p class="title">';
insert += thisItem.children('title').text();
insert += '</p>';
// リンク先の挿入
insert += '<a href="' + thisItem.children('link').text() + '">詳細はコチラ</a>';
insert += '</li>';
};
insert += '</ul>';
$('#sample').append(insert);
}
});
});
色々調べてみたところ、キャッシュが残ってしまっているのが原因のようでした。
解決方法
取得先URLの後にパラメーターを追加することで、毎回キャッシュがない状態で取得するようにしています。
JavaScript
$(function() {
$.ajax({
type : 'GET',
url: './get.php?' + parseInt((new Date)/1000),
dataType: 'xml',
success: function(data) {
// 取得件数
var getCount = 5;
if ($('item', data).length < getCount) {
getCount = data.length;
};
var insert = '';
insert += '<h1>';
// リンク先の挿入
insert += '<a href="' + $('channel', data).children('link').text() + '">';
// タイトルの挿入
insert += $('channel', data).children('title').text();
insert += '</a>';
insert += '</h1>';
insert += '<ul>';
for (var i = 0; i < getCount; i++) {
var thisItem = $('channel', data).children('item').eq(i);
insert += '<li>';
// 日時の挿入
insert += '<p class="pubDate">';
insert += thisItem.children('pubDate').text();
insert += '</p>';
// タイトルの挿入
insert += '<p class="title">';
insert += thisItem.children('title').text();
insert += '</p>';
// リンク先の挿入
insert += '<a href="' + thisItem.children('link').text() + '">詳細はコチラ</a>';
insert += '</li>';
};
insert += '</ul>';
$('#sample').append(insert);
}
});
});
4行目のparseInt((new Date)/1000)の部分で乱数を作成し、パラメーターとして付与しています。
対応後のデモページ
もしくは、単純にajaxのオプションでcacheの指定があるみたいなので、こちらでも対応できます。
JavaScript
$(function() {
$.ajax({
type : 'GET',
cache: false,
url: './get.php',
dataType: 'xml',
success: function(data) {
// 取得件数
var getCount = 5;
if ($('item', data).length < getCount) {
getCount = data.length;
};
var insert = '';
insert += '<h1>';
// リンク先の挿入
insert += '<a href="' + $('channel', data).children('link').text() + '">';
// タイトルの挿入
insert += $('channel', data).children('title').text();
insert += '</a>';
insert += '</h1>';
insert += '<ul>';
for (var i = 0; i < getCount; i++) {
var thisItem = $('channel', data).children('item').eq(i);
insert += '<li>';
// 日時の挿入
insert += '<p class="pubDate">';
insert += thisItem.children('pubDate').text();
insert += '</p>';
// タイトルの挿入
insert += '<p class="title">';
insert += thisItem.children('title').text();
insert += '</p>';
// リンク先の挿入
insert += '<a href="' + thisItem.children('link').text() + '">詳細はコチラ</a>';
insert += '</li>';
};
insert += '</ul>';
$('#sample').append(insert);
}
});
});
4行目のcache: false とすることで、通信結果をキャッシュに残さないようにします。
対応後のデモページ2
【参考サイト】
コメントが承認されるまで時間がかかります。