2011-07-06 7 views
2

特定の条件が満たされている(フラッシュベースのラジオプレーヤーがアクティブになっている)場合は、$.ajax()を使用して自分のサイトに新しいページを読み込みます。しかし、私はこの場合のサーバー側の出力を変更しないことをお勧めします。

私のページに両方の応答を埋め込む(これは簡単に.replaceWith()を使って行います)が、このページに埋め込まれたjavascriptsを実行する方法が必要です。

私は<div id="onload" data-onload="functionname" data-onload-args="json-for-the-function-args">のようなダミーのdivを作成していたと思っていましたが、HTMLコード(つまり、純粋なjs/jqueryソリューション)を変更する必要はありません。


$(elem).load()を使用すると、検索された文書の断片のみが使用されている場合、それは任意のスクリプトを評価しないよう可能ないであることに注意してください:

//における文書の内容を注入し、 IE

のいずれかの「アクセス許可が拒否されました」エラーを回避するためのスクリプト
//を削除する私は、このIEについての詳細を知りません問題は、もちろん、あなたが提案しようとしているコードは、最近のIEバージョンでエラーを起こしてはいけません(私はIE6は気にしません)。

+0

最初にレスポンスを埋め込み、関連するコードを含むjavascriptファイルをロードすることは可能です... jquery deferrendを使用することができます... – Rafay

+0

これは実際には不可能です。外部JSがすべて読み込まれます。これはページ上のものを初期化するための関数呼び出しです。この関数は完全に静的ではない引数を受け取ります(そうでなければ、HTMLにJSコードはありません)。 – ThiefMaster

答えて

0

は、実は私も正常に動作汚れた液の種類を使用して、それを解く:

私は私のサーバーのどこにも使用されていないコメントを、実際のコンテンツの一部を囲みますサイドテンプレート。 次に、dataType: 'text'でコンテンツ全体を取り出し、文字列関数を使用して興味のある部分を抽出します(最初の開始コメントと最後の終了コメントを検索するので安全です。実際のコンテンツにはコメントが含まれていても問題は発生しません何らかの理由で)。

この後、私は.html()を使用して要素を更新します。重要なことは、でないことです。は、スクリプトタグを壊すので、取得したHTMLコードからDOM要素を作成することです。

-1

load()を使用してみましたか? http://api.jquery.com/load/

私はそれがスクリプトを解析し、あなたのために実行する必要がありますと信じています。

EDIT:ISが問題ではありませんでしたか、私はそれを発見していないと負荷に関する

[OK]を、いずれかのビット()は使用されていません。そのことを念頭に置いて、スクリプトのストリッピングなしで新しいバージョンの負荷を作成しました。これはIE6,7,8、Chrome、Firefoxで動作するようです...

<script type="text/javascript"> 
     $(function() { 
      setTimeout(function() { 
       $('#target').load2('inject.html #inject'); 
      }, 5000); 
     }); 

     jQuery.fn.extend({ 
      load2: function(url, params, callback) { 
       if (typeof url !== "string" && _load) { 
        return _load.apply(this, arguments); 

        // Don't do a request if no elements are being requested 
       } else if (!this.length) { 
        return this; 
       } 

       var off = url.indexOf(" "); 
       if (off >= 0) { 
        var selector = url.slice(off, url.length); 
        url = url.slice(0, off); 
       } 

       // Default to a GET request 
       var type = "GET"; 

       // If the second parameter was provided 
       if (params) { 
        // If it's a function 
        if (jQuery.isFunction(params)) { 
         // We assume that it's the callback 
         callback = params; 
         params = undefined; 

         // Otherwise, build a param string 
        } else if (typeof params === "object") { 
         params = jQuery.param(params, jQuery.ajaxSettings.traditional); 
         type = "POST"; 
        } 
       } 

       var self = this; 

       // Request the remote document 
       jQuery.ajax({ 
        url: url, 
        type: type, 
        dataType: "html", 
        data: params, 
        // Complete callback (responseText is used internally) 
        complete: function(jqXHR, status, responseText) { 
         // Store the response as specified by the jqXHR object 
         responseText = jqXHR.responseText; 
         // If successful, inject the HTML into all the matched elements 
         if (jqXHR.isResolved()) { 
          // #4825: Get the actual response in case 
          // a dataFilter is present in ajaxSettings 
          jqXHR.done(function(r) { 
           responseText = r; 
          }); 
          // See if a selector was specified 
          self.html(selector ? 
          // Create a dummy div to hold the results 
           jQuery("<div>") 
          // inject the contents of the document in, removing the scripts 
          // to avoid any 'Permission Denied' errors in IE 
            .append(responseText/*.replace(rscript, "")*/) 

          // Locate the specified elements 
            .find(selector) : 

          // If not, just inject the full result 
           responseText); 
         } 

         if (callback) { 
          self.each(callback, [responseText, status, jqXHR]); 
         } 
        } 
       }); 

       return this; 
      } 
     }); 
    </script> 
+1

はすでに** **できません – Rafay

0
線に沿って

何か:

$('container').html(text_from_ajax_request); 
$('container script').each(function(){ 
    var $this = $(this); 
      src = $this.attr('src'); 

    src ? $.getScript(src) : eval($(this).text()); 
}); 
関連する問題