jQueryのloadのcallbackが変な動作

このQ&Aのポイント
  • jQueryのloadメソッドでCallBackが成功しているにも関わらず失敗する場合があります。対象方法が全くわからないのでご教示願えませんでしょうか?
  • 問題は★印が付いているところの処理です。アラートではSUCCESSになるのですが、なぜかロードが失敗する時があります。割合としては10回に1回程度で1回発生するとブラウザの再起動をしない限り二度とロードができなくなります。原因は何がいけないのでしょうか?
  • jQueryのloadメソッドでCallBackが成功しているにも関わらず失敗する場合があります。ロードが失敗する時がありますが、原因は何がいけないのでしょうか?
回答を見る
  • ベストアンサー

jQueryのloadのcallbackが変な動作

jQueryのloadメソッドでCallBackが成功しているにも関わらず失敗する場合があります・・・対象方法が全くわからないのでご教示願えませんでしょうか? 【A.html】 <script type="text/javascript" src="jquery-1.4.1.min.js"></script> <table> <tr> <td><div id = "target_1"><div id = "target_2"></td> </tr> </table> <script type="text/javascript"> $.ajaxSetup({ cache: false }); var xmlHttp; xmlHttp = new XMLHttpRequest(); xmlHttp.open("GET", "A.html", false); xmlHttp.send(null); alert(xmlHttp.responseText); $(document).ready(function(){ $("#target_1").load("a.txt .tag", function(Text, status) { if ($("#target_1").text() == "あああ") { $("#target_1").replaceWith("<img src = 'a.png'>"); else if ($("#target_1").text() == "いいい") $("#target_1").replaceWith("<img src = 'b.png'>"); alert( "text: " + Text + "\nstatus: " + status ); }); $(document).ready(function(){ $("#target_1").load("a.txt .tag", function(Text, status) { if ($("#target_1").text() == "あああ") { $("#target_2").load("a.txt .5tag");★ else if ($("#target_1").text() == "いいい") $("#target_2").load("a.txt .5tag");★ alert( "text: " + Text + "\nstatus: " + status ); }); }); 問題は★印が付いているところの処理です。 アラートではSUCCESSになるのですが、なぜかロードが失敗する時があります。 割合としては10回に1回程度で1回発生するとブラウザの再起動をしない限り二度とロードができなくなります。 原因は何がいけないのでしょうか?

  • mr-r00
  • お礼率93% (480/516)

質問者が選んだベストアンサー

  • ベストアンサー
  • bornless
  • ベストアンサー率46% (7/15)
回答No.1

なぜ$(document).readyが2つあるのでしょう? そして、なぜそれぞれの$(document).readyの中で$("#target_1").loadを処理しているのでしょうか。 下記のような感じで1つにまとめてみたらいいんじゃないでしょうか。 試していないのでわかりませんが、2つの$(document).ready、$("#target_1").loadの呼びだされるタイミングがシビアになっていて時々エラーが起きているのではないでしょうか。 $(document).ready(function(){   $("#target_1").load("a.txt .tag", function(Text, status) {     if ($("#target_1").text() == "あああ") {       $("#target_2").load("a.txt .5tag");       $("#target_1").replaceWith("<img src = 'a.png'>");     else if ($("#target_1").text() == "いいい") {       $("#target_2").load("a.txt .5tag");       $("#target_1").replaceWith("<img src = 'b.png'>"); }     alert( "text: " + Text + "\nstatus: " + status ); });

mr-r00
質問者

お礼

ありがとうございます。大変参考になる意見ありがとうございました。

その他の回答 (2)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

解決したのかどうかわかりませんが… >問題は★印が付いているところの処理です。 >アラートではSUCCESSになるのですが、なぜか >ロードが失敗する時があります SUCSESSになっているのは、★印の処理ではなくその前の通信結果でしょう。 まずは、対象としている処理のstatusに何が返るのか(返らないのか)を確認なさってはいかがでしょうか。 その前に、  if (A) {    処理1  else if (B)    処理2  alert( ~ ); の構文になっていますが、A、Bに該当しない場合(処理が実行されない)可能性はないのでしょうか? どのルートを通っているかの確認もなさったほうが良いのでは? また、上記(質問文に記載の)コードだと「{」に対応する「}」が見当たらないので、エラーになっている可能性も… (単なるタイポかな)

mr-r00
質問者

お礼

ありがとうございます。大変参考になる意見ありがとうございました。

  • bornless
  • ベストアンサー率46% (7/15)
回答No.2

すいません、さっきの回答ですがコードのインデントに全角スペース使ってるので、適宜半角スペースに置き換えてください

mr-r00
質問者

お礼

ありがとうございます。大変参考になる意見ありがとうございました。

関連するQ&A

  • javascriptで困っています。教えてください

    以下のようにjavascriptの内容を書いた外部のテキストファイルを読み込んで、実行しようとしているのですが、うまくいきません。普通にjavascriptを読み込むのは分かっているのですが、このような方法ができないのでしょうか?よろしくお願いします。 <!doctype html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>無題ドキュメント</title> </head> <body> <div id="jsbox"></div> <script type="text/javascript"> var jsbox = document.getElementById("jsbox"); //非同期通信///////////////////////////////////////////// var xmlHttp; loadText(); function loadText(){ if (window.XMLHttpRequest){ xmlHttp = new XMLHttpRequest(); }else{ if (window.ActiveXObject){ xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); }else{ xmlHttp = null; } } xmlHttp.onreadystatechange = checkStatus; xmlHttp.open("GET", "http://xxxxxxxxxxxx/js_test.txt", true); xmlHttp.send(null); } function checkStatus(){ if (xmlHttp.readyState == 4 && xmlHttp.status == 200){ var str = xmlHttp.responseText;alert(str); jsbox.innerHTML = str; test_js(); } } ///////////////////////////////////////////////////////////////// </script> </body> </html> テキストファイルをhttp://xxxxxxxxxxxx/js_test.txtに置き、テキストファイルの内容が <script type="text/javascript"> function test_js(){ alert("test"); } </script>

  • jQueryでloadメソッドを使用しているのですがコードの効率化につ

    jQueryでloadメソッドを使用しているのですがコードの効率化についてヒントをください。 こんなコードです。 $("#load1").load("A.html .flag1", function(Text, status) {   if ($("#load1").text() == "A") $("#load1").css({backgroundColor:"red"});  else if ($("#load1").text() == "B") $("#load1").css({backgroundColor:"yellow"}); else if ($("#load1").text() == "C") $("#load1").css({backgroundColor:"blue"}); }); $("#load2").load("B.html .flag1", function(Text, status) {   if ($("#load1").text() == "A") $("#load1").css({backgroundColor:"red"});  else if ($("#load1").text() == "B") $("#load1").css({backgroundColor:"yellow"}); else if ($("#load1").text() == "C") $("#load1").css({backgroundColor:"blue"}); }); $("#load3").load("C.html .flag1", function(Text, status) {   if ($("#load1").text() == "A") $("#load1").css({backgroundColor:"red"});  else if ($("#load1").text() == "B") $("#load1").css({backgroundColor:"yellow"}); else if ($("#load1").text() == "C") $("#load1").css({backgroundColor:"blue"}); }); ・ ・ ・ 指定している要素とloadするURL以外はコードが全く一緒なんですよね これをどうにか効率化出来ないでしょうか?

  • Ajax テキストエリアについて

    作ったテキストエリアにXmlHttpObjを出力したいのですがどのようにすればいいでしょうか? テキストエリアは <textarea id="text" style="width:100%; height:300px;"disabled></textarea><br> というように作りました。 XmlHttpObjは var xmlhttp; function httpHandler(){ if(xmlhttp.readyState == 4 && xmlhttp.status == 200){ alert(xmlhttp.responseText); } } function onButtonclick(){ xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.onreadystatechange = httpHandler; xmlhttp.open("GET", "data.txt"); xmlhttp.send(null); } このようにしました。(仮で出力をアラート形式にしております。) 回答よろしくお願いします。

    • ベストアンサー
    • AJAX
  • jQueryでloadメソッドを使用して要素を解析して文字列を表示して

    jQueryでloadメソッドを使用して要素を解析して文字列を表示しています。 その文字列が何であるかを判定して後の動作を行いたいのですがどうしても出来ません。 コールバックはうまくいっているみたいなのですが・・・ $(function() { var load1 = $("load1"); $("#load1").load("A.html .flag1", null, function(text, status, XMLHttpRequest) { if ($("#load1").length == "A") { load1.css({ backgroundColor: "red" }); }; alert("text: " + text + "\nstatus: " + status + XMLHttpRequest); }); });

  • jQuery.eachは第2引数以上は作れないのでしょうか?

    jQuery.eachは第2引数以上は作れないのでしょうか? 配列として3つ設定したい場合はできないものなのでしょうか? var list = { "#load1": "A.html .ld1":"aaa1", "#load2": "B.html .ld2":"bbb2", "#load3": "C.html .ld3":"ccc3" }; jQuery.each(list, function(key,val, arg) { $(key).load(val, function(Text, status) { if ($(key).text() == "A") $(arg).replaceWith("<img src='baby.png'/>"); }); }); こんな書き方は出来なかったので・・・ 第3引数があるか調べてみたものの第2までしか書いていないのでないと思っています。 しかし3つ以上の場合はどのようにしたらいいのでしょうか?

  • 透過pngで作った画像がIE6で表示がおかしいです。いろんな対策をして

    透過pngで作った画像がIE6で表示がおかしいです。いろんな対策をしてみても全然よくなりません・・・ IE6で表示すると透明にしたい部分が薄い灰色になってしまいます。(jQuery系の対策をした場合) 何も対策なしでは透明にしたい部分が真っ黒。。。対策をしてみても画像がつぶれることもあります。 そもそもjQueryでロードした文字列によって動的に画像を書き換えているので対策自体不可能なのでしょうか? $(key).load(val, function(Text, status) { if ($(key).text() == "A") $(key).replaceWith("<img src='XX.png' width='128' height='29'/>"); else if ($(key).text() == "B") $(key).replaceWith("<img src='YY.png' width='128' height='29'/>"); else if ($(key).text() == "C") $(key).replaceWith("<img src='ZZ.png' width='128' height='29'/>"); });

  • JQuery のCSVについて

    JQuery のCSVについて JQCSV というプラグインを検討していますが、動作が不安定なことが見出されました。状態・対応の方法をお教えください。(IE6.0) <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script type="text/javascript" src="subf/jquery-1.4.2.min.js"></script> <script type="text/javascript" src="subf/jQCSV.js"></script> <script type="text/javascript"> var qRec; $(function (){ $.get("camData.csv",function(text){ qRec =$.csv()(text); }); alert("AAA"); alert(qRec[1][0]); $.get("refA.txt",function(text){ alert(text); $('#tell').html(text); }); }); </script> </head> <body> <div id="tell">aaa</div> </body></html> 上のコードで、alert("AAA") をコメント行とすると、alert(qRec[1][0]); 以下が動作しません。 これはどのような現象でしょうか。対応法はありますでしょうか。

  • jQueryでloadしたページ内でもjQueryを使う方法

    例えば、base.html内にjQueryでadd.htmlをloadします。 base.htmlに下記コードを記述 $(document).ready(function(){  $("a").click(function(){   alert("click");   return false;  }); }); base.htmlに直接記述したaタグではアラートが出ますが、 base.htmlに読み込んだadd.html内のaタグでは適用されません。 Ajaxで読み込んだページ内にもjQueryを使用したい場合には、 どのようにすればよいのでしょうか?

  • jqueryを使いajaxで取得したデータをコールバック関数外で取得する方法

    下記のようなスクリプトでjQueryを使い、ajaxでtextを取得します。 コールバック関数内では、もちろんtextが使えるのですが、コールバック関数外からはtextに一切アクセスできなくなります。 このようにグローバルからajaxで取得したデータは取得できないのでしょうか? prototype.jsでも同じ結果です。 グローバルからの取得法、ご存知の方いらっしゃいましたらご教示頂ければと思います。 <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript"><!-- $(document).ready(function (){ $.get("./sample.txt",function(text){ alert(text); // textが取得できる }); }); alert(text); // textが取得できない // --></script>

  • jQueryで画像にリンクを張りたい

    HTMLページに <img src="1.jpg" width="50" height="50" id="tes"> というタグがあるのですが、 ページが読み込まれたときに、 そのタグにaタグをつけて <a href="hoge.html" target="_blank"><img src="1.jpg" width="50" height="50" id="tes"></a> とリンクを張りたいのですが以下のような スクリプトを書いてみたのですが、 できません。 <script type="text/javascript"> $(function(){ $('<img />').append($('<a />',{ href:"hoge.html", target:"_blank" }) ) }); </script> jQueryがよくわかっていないのでめちゃくちゃなのだと思いますが、 そもそもこのように画像にaタグをつけることは可能なのでしょうか。 jQueryのバージョンは1.2.6を使っていますが、 新しいバージョンでも構いません。 よろしくお願いします。

専門家に質問してみよう