2016-12-15 5 views
0

キャッシングを無効にした「ロード」関数が必要でした。私が書いたことを実行します。jQuery.fn.extend関数が定義されなくなる

ファイル名:私はONCEそれを使用する場合RootFoolder/script.js

jQuery.fn.extend({ 
    loadWithoutCache: function() { 
     var element = $(this); 

     if (arguments[0] != undefined) { 
      $.ajax({url: arguments[0], cache: false, dataType: "html", success: function(data, textStatus, XMLHttpRequest) { 
       element.html(data); 
      }}); 
     } 
     else { 
      console.log("Invalid Arguments"); 
     } 
    } 
}); 

は、上記正常に動作します。ただし、2回目に使用すると、loadWithoutCacheは未定義です。

私は以下のようにそれを使用しています:

ファイル名:RootFolder/index.html

<html> 
<head> 
    <title>Page Loader</title> 
    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> 
    <script type="text/javascript" src="script.js"></script> 
</head> 
<body> 
    <p> 
     Some Text Description<br /><br /> 

     <b>Choose a page:</b><br /> 
     <select id="section"> 
      <option value="1">Page 1</option> 
      <option value="2">Page 2</option> 
     </select> 

     <div id="content"> 
     </div> 


     <script type="text/javascript"> 
      $('#section').on('change', function() { 
       var pages = ["page1.html", 
          "page2.html"]; 

       var index = $(this).val() - 1; 
       $("#content").loadWithoutCache(pages[index]); 
      }); 
     </script> 
    </p> 
</body> 
</html> 

ファイル名:RootFolder/page1.html

<html> 
<head> 
    <title>Page</title> 
    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> 
    <script type="text/javascript" src="script.js"></script> 
</head> 
<body> 
    <br /> 
    <h3>Page 1</h3> 
    <b> - Description</b><br /><br /> 
    <p> 
     Some Paragraph 
    </p> 
</body> 
</html> 

ファイル名:RootFolder/page2.html

<html> 
<head> 
    <title>Page</title> 
    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> 
    <script type="text/javascript" src="script.js"></script> 
</head> 
<body> 
    <br /> 
    <h3>Page 2</h3> 
    <b> - Description</b><br /><br /> 
    <p> 
     Some Paragraph 
    </p> 
</body> 
</html> 

indexページで、ドロップダウンからPage 2を選択すると、それが機能します。次に、同じドロップダウンからPage 1を選択すると、私には未定義が与えられます。

私はloadWithoutCache機能を作った後、右var index = $(this).val() - 1;$.fn.loadWithoutCache = loadFunc;を行う場合、それはすべての時間を動作します:S

私は動的に別のページの内部でHTMLページをロードする方法をテストするためにこれを書いています。

なぜそれが定義されていませんか?私は何を逃したのですか?

+0

エラーを示すスニペットやフィドルを提供できますか? – trincot

+0

@Brandonは$( "#content")がまだ "div"を見つけたことを確認しましたか?それはまだ1つのマッチがまだあるだけですか?あなたはHTMLをドロップしているので、私はIDの競合が導入される可能性があると考えています。それはストレッチですが、成功した "loadWithoutCache"の実行後にレンダリングされたHTMLを投稿することができれば、それをエラーとして排除します。 – Adrian

+0

@Aliester; @trincot;こんにちは、私はテストしているページを含めるために質問を更新しました。私はJSFiddleに複数のページを追加する方法を理解することができないので、3つのHTMLページと1つのJavascriptファイルを質問に追加しました。 – Brandon

答えて

2

ページを切り替えると、jQueryが再びロードされ、extendが無効になります。 jQueryを再度ロードしないでください。また、script.jsもロードしますが、これらのスクリプトがロードされ実行される方法は、プレーン・ナビゲーションでロードされるページとまったく同じではありません。標準のAjaxでは処理されないため、jQueryによって処理されます。埋め込みスクリプトをロード/実行します。私は、そのプロセスの間にの間にjQuery をリロードすることによって、物事が厄介になり、script.jsが再び実行されないと推測します。

ので:あなたはすでにスクリプトがロードされてきたように彼らは必要ありません....、あなたのページpage1.htmlpage2.htmlからheadタグを除外。

Aliesterのコメントのように、body部分のみを読み込むことで(同じようにheadタグを除く)、同じ効果を得ることができます。

+0

私はもう一度ロードしなければ動作しますが、 'script.js'もロードしないでしょうか?どのようにすればいいですか?(' body ').html()); – Brandon

+0

私はそれが簡単ではないことを説明するために私の答えを延長しました。 – trincot

関連する問題