0

我有两个视图由一个控制器处理。

视图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 而不是全部,你必须修改 serverscript 使它只返回你的目标 html。jquery/javascript 无法做到这一点。

于 2013-10-18T17:43:52.637 回答
2

因为获取该页面的唯一方法是将其加载到内存中并查询出来。

如果您不希望获取所有内容,则让服务器只返回您想要的数据。

于 2013-10-18T17:32:00.913 回答