我已经开始了一份新工作,我正在工作的项目部分有一个非常奇怪的结构。每个页面都是一个.Net aspx页面,它加载得很好,但在加载时没有真正完成。一切都是从jquery document.onready处理程序中加载的。
更有趣的是......有趣的是onready处理程序调用一些ajax调用,将整个.aspx页面放到页面上的div中,但首先它会删除返回页面的几个部分。这是前一个程序员从他的ajax调用中运行所有返回的html的“神奇”脚本:
function CleanupResponseText(responseText, uniqueName) {
responseText = responseText.replace("theForm.submit();", "SubmitSubForm(theForm, $(theForm).parent());");
responseText = responseText.replace(new RegExp("theForm", "g"), uniqueName);
responseText = responseText.replace(new RegExp("doPostBack", "g"), "doPostBack" + uniqueName);
return responseText;
}
然后他拦截任何形式的回发并运行他自己的表单提交功能:
function SubmitSubForm(form, container) {
//ShowLoading(container);
$(form).ajaxSubmit( {
url: $(form).attr("action"),
success: function(responseText) {
$(container).html(CleanupResponseText(responseText, form.id));
$("form", container).css("margin-top", "0").css("padding-top", "0");
//HideLoading(container);
}
}
);
}
我认为这不是最优的吗?我的意思是,浏览器如何取出html和head以及其他与你真正想要放入div的内容无关的标签?
此外,他正在返回像asp:gridview控件和关联视图状态这样的东西,如果他的数据集很大,它可能会非常大。
有没有人见过这个?
答案 0 :(得分:1)
ASP.NET不支持在同一页面上拥有多个表单。看起来这是在规避这一点。
您的网站运行缓慢吗? (你需要担心这种表现吗?)
您的网页中是否包含多个<html> <body> <head>
个标签?或者在返回控件以在页面上呈现之前将其删除?如果他们留在那里,浏览器只是处理它,但他们喜欢,并且行为(据我所知)没有定义,不能确定是一致的。
答案 1 :(得分:1)
...它加载得很好......
没问题,不用担心:-)不是我会选择这种方法。
然而,回答结束:现代网络浏览器只是为给定的上下文丢弃无效的HTML标签(HTML / HEAD / BODY不会在DIV内飞行;-)而尽力而为< / em>添加他们所能做的一切。因此,虽然丑陋且依赖于实现细节,但浏览器的最大努力使得这可以用于广泛的输入。 YMMV。
答案 2 :(得分:1)
我早在2006年刚刚学习Ajax时,用它在页面加载后检索页面的主要内容。 (或者更确切地说,在html的底部)。但我很快放弃了它。
感觉不对。
即使它有效,它仍然感觉它更像是一个黑客而不是坚实的代码。