Javascript 这是典型的Ajax行为吗?若然,原因为何?
我有两个视图由一个控制器处理 查看A-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
<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匹配的元素