jQueryとMooToolsを使った場合のローカル動作の違い

このQ&Aのポイント
  • jQueryを使った場合、ローカル環境でも指定したファイルを読み込むことができます。
  • 一方、MooToolsを使った場合、上記の方法ではローカルでの動作ができません。
  • MooToolsの代わりに他の方法を探し、ローカル環境での動作を実現する必要があります。
回答を見る
  • ベストアンサー

jQueryを使った時とmootoolsを使った時のローカルでの動作の違い

jqueryの場合は function open(){ $(id).load(path); } のようにするとローカル環境でもpathで指定したファイルを読み込んでくれますが、mootoolsの場合は function open(){ new Ajax(path, {method: 'get', update: $(id)}).request(); } のようにするとローカルでは動作しません。 現在はそれぞれどのような動きをしているのかわからない状態です。 jqueryは極力使わずにローカルで動作するようにしたいのですが、どのようにすればいいでしょうか。 よろしくお願いします。

  • AJAX
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • x_jouet_x
  • ベストアンサー率68% (162/236)
回答No.2

それらしいMooToolsのJavaScriptファイルを見つけてきてソースコードを確認しました。 MooToolsのAjaxクラスは、XMLHttpRequestオブジェクトで一般的なAjax通信を行う処理が記述されています。 普通、Ajax通信はXMLHttpRequestオブジェクトのreadyStateプロパティ値が4、かつstatusプロパティ値が200のときに正常通信として処理が行われます。 ローカルでXMLHttpRequestオブジェクトを使用すると、statusプロパティ値が200にならないので正常通信として扱われません。 なので、MooToolsの方はローカルで動作しません。 一方、jQueryの方ですがこれもソースコードを確認しましたが、XMLHttpRequestオブジェクトのプロパティ値も見ていますが、location.protocolが"file:"のときの処理も別に記述してありました。 なので、jQueryの方はローカルでも動作します。 jQueryを使わないでローカルで動作させるには、この部分の処理を記述しないとダメそうですね。

metametamu
質問者

お礼

オブジェクトのプロパティの値で判別しているとは知りませんでした! おかげさまで無事振り分けすることができました。 ありがとうございました。

その他の回答 (1)

  • x_jouet_x
  • ベストアンサー率68% (162/236)
回答No.1

使用しているMooToolsのバージョンを教えて頂けませんか? XMLHttpRequestは、MooToolsの最新バージョンだとRequestクラスを使用すると思うのですが・・・。

metametamu
質問者

補足

ご回答ありがとうございます。 細かいバージョンがわかりませんが現在posteditorを使うために入れているので、Subversion版だと思います。 コメントに2006という表記しかないので、最新版ではないと思います。

関連するQ&A

  • 一部のjQueryとmootoolsが競合します

    dropdownメニューのdroppy(jquery)とmootoolsを使用したカレンダーが競合してしまいます。 mootoolsのカレンダーhttp://www.electricprism.com/aeron/calendar/ とメールフォームプロ http://www.synck.com/contents/download/cgi-perl/mailformpro.html のjqueryの組み合わせは問題ありませんでした。そこにdroppy http://onehackoranother.com/projects/jquery/droppy/ が入ると動かなくなります。 助けて頂ければ嬉しいです。よろしくお願いいたします。 jQuery.noConflict();やDollar Safe Modeなどもやってみましたが、うまくいきません。どこが間違っているのでしょうか? <script type="text/javascript"> jQuery.noConflict(); jQuery(function(){ jQuery("#nav").droppy(); }); </script> ----------------------------- <script type="text/javascript"> $(function() { $("#nav").droppy(); }); (function($) { window.addEvent('domready', function() { myCal1 = new Calendar({ date1: 'Y/m/d' }, { direction: 1, tweak: {x: 6, y: 0} }); }); }(document.id)); </script> ---元はこちら↓-------------- <script type="text/javascript" src="commons/jquery.js"></script> <script type="text/javascript" src="js/jquery.droppy.js"></script> <script type="text/javascript"> $(function() { $("#nav").droppy(); }); </script> メールフォームプロ↓ <script type="text/javascript" src="commons/mfp.lang.js" charset="UTF-8"></script> <script type="text/javascript" src="commons/mfp.extensions.js" charset="UTF-8"></script> <script type="text/javascript" src="commons/mailform.js" charset="UTF-8"></script> <script type="text/javascript" src="postcodes/get.cgi?js" charset="UTF-8"></script> カレンダー↓ <script type="text/javascript" src="js/mootools.js"></script> <script type="text/javascript" src="js/calendar.rc4.js"></script> <script type="text/javascript"> //<![CDATA[ window.addEvent('domready', function() { myCal1 = new Calendar({ date1: 'Y/m/d' }, { direction: 1, tweak: {x: 6, y: 0} }); }); //]]> </script>

  • mootoolsとjQueryの共存がうまくいかず、エラーが出る。

    mootoolsの「SlideIn」とjQueryの「lavalamp」を同時に動かしたいのですが、上手くいきません。。 共存がうまくいってないのとエラーがでます。 ・SlideIn ttp://solidstate.jp/ImageDisplay/effectAction/script_66.html ・lavalamp ttp://www.gmarwaha.com/blog/2007/08/23/lavalamp-for-jquery-lovers 共存させるために、以下のURLを参考にしてます。 ・jQuery⇒mootoolsの共存 ttp://h2ham.seesaa.net/article/106053238.html ・jQueryとprototype.jsを共存させる方法 ttp://www.css-lecture.com/log/javascript/029.html 最後の「この記述ですとjQueryの$をj$に書き換えなくて大丈夫です。」の部分の以下を使用してます。 <script type="text/javascript"> jQuery.noConflict()(function($){ var j$ = jQuery; </script> 共存するためには「jquery_1.3.2.min.js」の下に、「jQuery.noConflict()(function($){」をもってくるようですが、 jqueryの方は順番の指定「jquery本体⇒easing⇒lavalamp」があるため順番変更ができません。。 そして、Firefoxでjavaエラーがでています。上が出ているエラー表示で、下がエラーの箇所です。 ・missing } after function body var j$ = jQuery; ・$(".lavaLamp") is null $(".lavaLamp").lavaLamp({ ・$('startFx') is null $('startFx').addEvent('click', function (e){ 共存させず、mootools、jqueryどちらも単体で動かした場合、正常動作しています。(エラーはでますが・・) 分かる方いましたら、回答おねがします。 javascript部分--------------------------------------------------------------------------------------------------------------------------------------------- <!--jquery--> <script type="text/javascript" src="jquery_1.3.2.min.js"></script> <script type="text/javascript" src="jquery.easing.1.1.js"></script> <script type="text/javascript" src="jquery.lavalamp.js"></script> <script type="text/javascript"> $(function() { $(".lavaLamp").lavaLamp({ fx: "backout", speed: 800, click: function(event, menuItem) { return true; } }); }); </script> <!--共存記述--> <script type="text/javascript"> jQuery.noConflict()(function($){ var j$ = jQuery; </script> <!--mootools--> <script type="text/javascript" src="mootools.v1.11.js"></script> <script type="text/javascript"> var SlideIn = { start: function () { var delay = 200; $$('.illust').each(function (el) { // ターゲットに付加するクラス名 el.setStyles({ 'position': 'relative', 'top': 20, //要素の開始位置 'opacity': 0 //要素の最初のアルファ }); var fx = el.effects({transition:Fx.Transitions.Back.easeOut}); fx.start.delay(delay, fx, { 'opacity': 1, //要素の最後のアルファ 'top': 0 //要素の終点の位置 }); delay += 200; }); } }; window.addEvent('domready', function () { SlideIn.start(); $('startFx').addEvent('click', function (e){ new Event(e).stop(); SlideIn.start(); }); }); </script>

  • このスクリプトを一定時間ごとに実行させるにはどうしたらいいですか?

    このスクリプトを一定時間ごとに実行させるにはどうしたらいいですか? javascript: document.cookie="nicohistory=;path=/;domain=nicovideo.jp;"; ml='watch/'+Video.v;sl='api/getflv/'+(Video.v+'\x3f').replace(/nm.*/,"$&as3=1&")+'ts='+(new Date()-7999); sb=function(ul){new Ajax.Request(ul,{method:'get'})}; me=function(ul,ue){new Ajax.Request(ul,{method:'get',onSuccess:function(h){sb(ue)}})}; me(ml,sl); void(0);

  • スクリプト

    javascript: document.cookie="nicohistory=;path=/;domain=nicovideo.jp;"; ml='watch/'+Video.v;sl='api/getflv/'+(Video.v+'\x3f').replace(/nm.*/,"$&as3=1&")+'ts='+(new Date()-7999); sb=function(ul){new Ajax.Request(ul,{method:'get'})}; me=function(ul,ue){new Ajax.Request(ul,{method:'get',onSuccess:function(h){sb(ue)}})}; me(ml,sl); void(0); このスクリプトを8秒ごとに30回実行させてその後45秒休むことを繰り返すスクリプトにするにはどうしたらいいですか?

  • jQueryが動きません。

    表題のとおりです。 fademover(http://www.detelu.com/fademover/)を動かそうと思って 導入しても動いてくれません。 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script src="jquery.fademover.js"></script> <script> $(function(){ $('body').fadeMover({'effectType': 2,'inSpeed': 5000}); }); </script> の部分。 Chromeだと Uncaught TypeError: Object [object Object] has no method 'fadeMover' index.html:14 (anonymous function) index.html:14 n ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js:2 o.fireWith ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js:2 e.extend.ready ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js:2 c.addEventListener.B Safariだと TypeError: 'undefined' is not a function (evaluating '$('body').fadeMover({'effectType': 2,'inSpeed': 5000})') と出ます。 jsやjqueryはあまりいじったことないので 手が出ない状態です。 よろしくお願いします。

  • jqueryについて質問です。

    jqueryについて質問です。 ----------------------------------------------------------- test.js $(window).load(function() { $("body").load("a.php"); $("#btn").click(function() { alert();///動作しない } }); ----------------------------------------------------------- a.html <input type="button" id="btn" name="btn" value="send"> ----------------------------------------------------------- load先のidのクリックを監視するにはどうしたらいいのでしょうか?

  • JQueryでのloadの動作がFirefoxで動かなくて困っています

    JQueryでのloadの動作がFirefoxで動かなくて困っています。 サイトのheaderとfooterを外部htmlにして、JQueryのloadで呼び出し指定のdivに出力するようにしたいのですが、IEでは上手くいきましたが、FFでは全く動きません。 $(document).ready(function(){ $("#header").load("../js/header.html #header"); $("#footer").load("../js/footer.html #footer"); });

  • 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回発生するとブラウザの再起動をしない限り二度とロードができなくなります。 原因は何がいけないのでしょうか?

  • ローカルでのonreadystatechangeの動作について

    現在下記のようなコードを書いて、HTMLを読み込む処理を行おうとしています。 function LoadHtml(id , uri) { if(!XmlsReq)return; XmlsReq.open('GET',uri); XmlsReq.send(null); XmlsReq.onreadystatechange=function(){ alert("piyo"); if(XmlsReq.status==0 || XmlsReq.readyState==4 && XmlsReq.status==200) { alert("hoge"); document.getElementById(id).innerHTML=XmlsReq.responseText; } } document.getElementById(id).innerHTML=XmlsReq.responseText; } これはHTTPサーバ上で動かすとちゃんと動作し、 またHTTPステータスコードが0になるローカルでもfirefoxなら動くのですが、 IE7で試してみたところ、動作しません。 原因を探してみたところ、XmlsReq.send(null);までは実行されておりalert("piyo")が表示されないことから、 どうもonreadystatechangeイベントが検出されていないような動きをしています。 ローカルのIE7環境でちゃんと動作させるにはどうしたら良いか、分かる方居ましたら教えて下さい。

    • ベストアンサー
    • AJAX
  • jquery ajax 外部html 読み込み

    現在、数年前にjquery(v1.4.3)を用いて制作したページの更新を行っており それに伴いjqueryも最新版(v1.11.1)への移行を試している最中なのですが ajaxの外部htmlを読み込む処理が実行されなくなり困っております。 旧バージョンとではメソッドの記述法が異なることは理解できておりますが 色々と書き換えてみたものの、以前のように動作させる事ができません。 以下がそれぞれの記述になりますが、もし問題にお気付きになられましたら ご指摘いただけますと幸いです。 jquery(v1.4.3): function loadAdd(obj){ $.ajax({ async: true, type: 'GET', url: tgtURL, dataType: 'html', cache: false, success: function(html){ var $div = $("#add"); $div.html(html); }, error: function(xhr, status, errorThrown){ alert("not found."); } }); } jquery(v1.11.1): function loadAdd(obj){ $.ajax({ async: true, type: 'GET', url: tgtURL, dataType: 'html', cache: false, }) .done(function(html){ var $div = $("#add"); $div.html(html); }) .fail(function(xhr, status, errorThrown){ alert("not found."); }); }

    • ベストアンサー
    • AJAX

専門家に質問してみよう