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

IEだけjQuery. load(非同期通信)ができない。
チェックボックスの値をチェックすれば、それに一致するデータを取得するjQueryの処理を書きました。
しかし、クロームやFirefoxではきちんと動作するのですが、IEでは全く反応しません。
いろいろと調べたのですが、解決方法が見つかりませんでした。
どうかよろしくお願いします。

$(function(){
$("input:checkbox").change(function(){getContents();});
$('#time').change(function(){getContents();});
$('#score').change(function(){getContents();});
});

$(".pagination a").live('click', function(){
$("#serviceListSection").load(this.href);
return false;
});

function getChecked(name) {
var AllVals = $('input[name="' + name + '"]:checked').map(function() {
return this.value;
});
AllVals = $.makeArray(AllVals).join('|');
return AllVals;
}

function getContents(){
var timeId =$('#time').val();
var countryId = getChecked('country_id[]');
var genreId = getChecked('genre_id[]');
var feelingId = getChecked('feeling_id[]');
var partnerId = getChecked('partner_id[]');
var scoreId =$('#score').val();

var http = $.get (
"results/title:/time:" + timeId + "/country_id:" + countryId + "/genre_id:" + genreId +
"/feeling_id:" + feelingId + "/partner_id:" + partnerId + "/score:" + scoreId,
null,
function ( data ) {
$("#serviceListSection").html(data);
}
)


●質問者: チョロQ
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● Cherenkov
●0ポイント

Cherenkovさんのコメント
回答1に追記したリンク先にある、キャッシュ無効化は試しましたか?

チョロQさんのコメント
返事が遅くなりすいません。 $.ajaxSetup({ cache: false }); を追加したりしたのですが、効果はありませんでした。

2 ● y-kawaz
●100ポイント

エラーは表に出てこない場合もあります。
IE9ならF12を押すと開発者ツールが出るので、そのコンソールを見てエラーが出てないかを確認して下さい。
あとネットワークのキャプチャを開始をしてから同じ事を行なって期待するリクエストが発生しているかどうかも確認してみて下さい。


チョロQさんのコメント
コンソールにはエラーがでておりません。 ネットワークのキャプチャを確認しましたところ、 「http://localhost/eigazuki/results/title:/time:150〜179/country_id:/genre_id:/feeling_id:/partner_id:/score:?_=1341463982365」 とリクエストが発生(結果500と赤で書かれている)しているのを確認できましたが、画面にはその結果が反映されませんでした。

y-kawazさんのコメント
反映されませんでした、じゃねーですよ…。 >リクエストが発生(結果500と赤で書かれている)しているのを確認できました ソコ明らかにエラー出てるじゃないですか。 500はサーバ側のエラーです。親切に赤で書かれているんだからエラーかな?とか思いましょうよ。 ソコに書いてあるURLをコピペしてブラウザでアクセスしてみたらコンテンツが帰ってきていないのが分かると思います。恐らくパラメータに不備があるんでしょう。 Chromeならツール→デベロッパーツールのNetworkのタブから、IE9と同じように発生したリクエストの情報が確認できます。Firefoxの場合はFirebugsという拡張を入れれば同様のことが出来ます。 IEとChromeとFirefoxでリクエストがどう違っているのか確認すれば jQuery.load ではなく、href を作っている関数あたりに問題があることはすぐに当たりが付きます。 あとはhrefを作っているgetContents関数辺りの問題になると思うので頑張って直して下さい。

チョロQさんのコメント
ご指摘ありがとうございます。 サーバ側のエラーが出ておりましたURLをブラウザを確認しましたところ、検索結果に一致したコンテンツが返ってきておりました。 jQuery.load内を徹底的に調べてみます。

y-kawazさんのコメント
500番なのにブラウザでそのURLを確認したらコンテンツが返ってきたんでしょうか? ボディーの内容が正常なのにレスポンスコードが500番ということならば、それはやはりサーバ側の問題だと思います。サーバは200(正常)を返すべきところです。 loadで取りに行っているURLに関してもネットワークのキャプチャを行い。直接アクセス時にどんなステータスが帰っているか確認して下さい。レスポンスの内容がまともなのに500番なら明らかにサーバ側の異常と判断してよいでしょう。 jQuery.load は多分レスポンスステータスが200の場合にしか挿入動作を行わないはずなので、結果の挿入がされないんでしょう。 なので調べるべきはやはりjQuery.loadではなくサーバ側プログラムだと思います。

チョロQさんのコメント
問題を解決するために怪しい個所を消した結果500エラーから304エラーに変わりました。 が、まだ解決できません。 もしよければ、問題のサイトを一度拝見しいください。 http://kyouryu.sakura.ne.jp/eigazuki/search

y-kawazさんのコメント
304はNotModifiedです。 これは「前回送ったデータから変化無いので手元のキャッシュを使って下さい。なのでレスポンスは返しません。」という意味です。 サーバが本当の意味で304を返してくれているのだとしたら、IEのキャッシュを削除したらなおるんじゃないでしょうか? 修正によってバグで304を返すようになったのであればいろんな意味で駄目な感じですが…。

y-kawazさんのコメント
ちなみにWin7+IE9で見てみて、チェックボックスを押してみたらコンテンツがちゃんとloadされたみたいです。 ですが、ChromeやFirefoxの時とは違って、チェックの情報を変えても内容が変わらないようですが。

Lhankor_Mhyさんのコメント
↑横ですが、そうそう、そこが分からないんですよねー。 リクエストURLも同じなのになんでレスポンスが違うんでしょう? わたし、気になります。

チョロQさんのコメント
そこが全くわからないです。 どうして、こんなことになるんだろうか・・・。 cakephpで書いているから、それが問題なんかな。

Lhankor_Mhyさんのコメント
原因はどうやらチルダみたいですねー。開発者ツールでtimeの値からチルダを削除したところそれっぽく動作しました。 ひょっとして、IEってHTTP通信とXMLRPC通信ではURLの処理が違うのかなあ?

Lhankor_Mhyさんのコメント
リクエストURLをサーバ側でチェックすると原因が分かりそうな気がします>質問者

y-kawazさんのコメント
まぁ「?」が怪しいのは最初から思ってましたが。 これvalueを?ではなく半角ハイフン「-」を使うようにして、サーバ側でもハイフンで区切られることを想定した修正をしてやれば直る気がしてきました。 もしくは「?」をURLエンコードしてやれば良いんじゃないかと。
関連質問

●質問をもっと探す●



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