Javascript 这是典型的Ajax行为吗?若然,原因为何?

Javascript 这是典型的Ajax行为吗?若然,原因为何?,javascript,jquery,ruby-on-rails,ajax,Javascript,Jquery,Ruby On Rails,Ajax,我有两个视图由一个控制器处理 查看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='loadin

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

查看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>

$.ajaxSetup({
缓存:false
});
var ajax_load=“”;
//load()函数
$(“#显示”)。单击(函数(){
var loadUrl=“/reports/ref_table_template/”
loadUrl=loadUrl+$(“#贷方选项:选定”).val();
$(“#着陆区”).html(ajax#u load).load(loadUrl+“#mydom>*”);
});
视图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行为吗?如果是,为什么会这样?有办法解决这个问题吗?

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


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

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


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

是的,这很典型。这就是jquery在内部所做的:

$.ajax({
    url: "/reports/ref_table_template/",
    success: function(responsestring){
        theelement.html($("<div />").html(responsestring).find("#mydom > *"));
    }
})
$.ajax({
url:“/reports/ref_table_template/”,
成功:功能(responsestring){
html($(“”)html(responsestring.find(“#mydom>*”));
}
})
它加载目标页面,然后通过选择器对其进行过滤,并将其设置为所选元素的内容

在您的情况下,选择器应该是
#mydom
,而不是
#mydom>*


如果希望服务器只返回目标html而不是全部,则必须修改服务器脚本,使其只返回目标html。jquery/javascript无法做到这一点。

是的,这是典型的。这就是jquery在内部所做的:

$.ajax({
    url: "/reports/ref_table_template/",
    success: function(responsestring){
        theelement.html($("<div />").html(responsestring).find("#mydom > *"));
    }
})
$.ajax({
url:“/reports/ref_table_template/”,
成功:功能(responsestring){
html($(“”)html(responsestring.find(“#mydom>*”));
}
})
它加载目标页面,然后通过选择器对其进行过滤,并将其设置为所选元素的内容

在您的情况下,选择器应该是
#mydom
,而不是
#mydom>*


如果希望服务器只返回目标html而不是全部,则必须修改服务器脚本,使其只返回目标html。jquery/javascript无法做到这一点。

这很有道理,但我认为Ajax一开始就是这么做的。它加载整个页面,然后选择指定的DOM&仅呈现该DOM,对吗?所以,考虑到我可能误解了它的工作原理,为什么我要从DOM的顶部到页面的底部,而不仅仅是DOM?另外,“让服务器只返回您想要的数据。”-这正是我想知道的方法。如果Ajax.load函数不能做到这一点,我可以使用什么方法呢?这是客户端实现这一点的唯一方法。XMLHttpRequest获取一个字符串,需要将其转换为一个树以便可以查询,因此需要将文本设置为一个节点并呈现它以便可以查询它。除了让服务器只返回您需要的内容之外,没有其他方法可以避免这种情况。这非常有意义——但我认为这就是Ajax的初衷。它加载整个页面,然后选择指定的DOM&仅呈现该DOM,对吗?所以,考虑到我可能误解了它的工作原理,为什么我要从DOM的顶部到页面的底部,而不仅仅是DOM?另外,“让服务器只返回您想要的数据。”-这正是我想知道的方法。如果Ajax.load函数不能做到这一点,我可以使用什么方法呢?这是客户端实现这一点的唯一方法。XMLHttpRequest获取一个字符串,需要将其转换为一个树以便可以查询,因此需要将文本设置为一个节点并呈现它以便可以查询它。除了让服务器只返回您需要的内容之外,没有其他方法可以避免它。另外+1用于解释。所以,如果我读对了,选择器几乎可以作为一个开始标志——本质上,从#selector开始,抓取所有内容到EOF并返回。我在这里走对了吗?不,它实际上只抓取选择器匹配的元素和这些元素的内容。使用我的选择器,它将得到该文本应该呈现的
由于jquery没有选择文本的选择器,因此不能只选择div中的文本。使用选择器,我希望它什么也得不到。因为选择器中的“>*”,我想?那个“>*”是我从中学到的东西,我决定玩弄它。最初,我在代码中没有这样做,但不管怎样,它仍然执行相同的操作。元素匹配正是我所期望的——只需通过该ID获取元素;但它也抓住了下面有不同ID的div。这是我难以理解的部分。当然,也可能是因为我未能以
edit结束表格:(我以前没有包含表格代码,因为它包含敏感的公司信息)。。。不排除这种可能性。事实上,我认为这一直是问题所在。。感谢对Ajax的深入了解——如果我没有犯这个错误,我就不知道它实际上是如何工作的!这很可能会导致这样的问题,也可以用+1来解释。所以,如果我读对了,选择器几乎可以作为一个开始标志——本质上,从#selector开始,抓取所有内容到EOF并返回。我在这里走对了吗?不,它实际上只抓取t匹配的元素