0

1 つのコントローラーで処理する 2 つのビューがあります。

ビューA-

<div id="landingzone" style="width:500; height:300;">

</div>

<script type="text/javascript">
  $.ajaxSetup ({
    cache: false
  });
  var ajax_load = "<img class='loading' src='/images/load.gif' alt='loading...' width='40px' />";

//  load() functions

  $("#show").click(function() {
    var loadUrl = "/reports/ref_table_template/"
    loadUrl = loadUrl + $('#lender option:selected').val();
    $("#landingzone").html(ajax_load).load( loadUrl + " #mydom > *" );
    });
</script>

ビュー B-

<div style="position: relative; align: float-right;" id="nodom1">
  Nothing here should matter!  I should be able to write profanities and not see them.
</div>

<div id="mydom" style="position: relative; align: float-left;">
  This text should render.
</div>

<div id="nodom2">
  This should also not render.
</div>

私が行った調査から私が期待することは、Ajax が機能するとき、ビュー B 内の「mydom」DOM からデータのみを取得し、それを「landingzone」にロードすることです。ただし、実際には「mydom」からすべてをロードするため、「nodom2」もロードします。

これは典型的な Ajax の動作ですか? もしそうなら、なぜこれを行うのですか?これを回避する方法はありますか?

4

2 に答える 2

2

はい、それは典型的です。これは、jquery が内部的に行っていることです。

$.ajax({
    url: "/reports/ref_table_template/",
    success: function(responsestring){
        theelement.html($("<div />").html(responsestring).find("#mydom > *"));
    }
})

対象のページを読み込み、セレクターでフィルタリングして、選択した要素のコンテンツとして設定します。

あなたの場合、セレクターは単にで#mydomはなく#mydom > *.

サーバーがすべてではなくターゲット html のみを返すようにしたい場合は、サーバー スクリプトを変更して、ターゲット html のみを返すようにする必要があります。それを達成するためにjquery/javascriptができることは何もありません。

于 2013-10-18T17:43:52.637 に答える
2

ページのその部分を取得する唯一の方法は、メモリにロードしてクエリを実行することです。

すべてのコンテンツを取得したくない場合は、必要なデータのみをサーバーに返すようにします。

于 2013-10-18T17:32:00.913 に答える