浪费的Ajax页面加载

时间:2010-05-14 21:30:27

标签: asp.net ajax

我已经开始了一份新工作,我正在工作的项目部分有一个非常奇怪的结构。每个页面都是一个.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控件和关联视图状态这样的东西,如果他的数据集很大,它可能会非常大。

有没有人见过这个?

3 个答案:

答案 0 :(得分:1)

ASP.NET不支持在同一页面上拥有多个表单。看起来这是在规避这一点。

您的网站运行缓慢吗? (你需要担心这种表现吗?)

您的网页中是否包含多个<html> <body> <head>个标签?或者在返回控件以在页面上呈现之前将其删除?如果他们留在那里,浏览器只是处理它,但他们喜欢,并且行为(据我所知)没有定义,不能确定是一致的。

答案 1 :(得分:1)

...它加载得很好......

没问题,不用担心:-)不是我会选择这种方法。

然而,回答结束:现代网络浏览器只是为给定的上下文丢弃无效的HTML标签(HTML / HEAD / BODY不会在DIV内飞行;-)而尽力而为< / em>添加他们所能做的一切。因此,虽然丑陋且依赖于实现细节,但浏览器的最大努力使得这可以用于广泛的输入。 YMMV。

答案 2 :(得分:1)

我早在2006年刚刚学习Ajax时,用它在页面加载后检索页面的主要内容。 (或者更确切地说,在html的底部)。但我很快放弃了它。

感觉不对。

  • 如果该网页可以在互联网上访问,那么这对营销/ SEO来说非常糟糕。由于搜索引擎将看到的是一个空页面。我认为大多数抓取工具都不打算运行javascript。
  • 表现明智,它没有多大帮助。随着时间的推移,我们已经了解到Ajax最适合用于更新html的一小部分。如果通过ajax返回的内容大于“加载大小”,那么您实际上并没有获得任何好处。通过缓存,加载时间非常短。
  • 兼容性。尽管所有主流浏览器都支持ajax,但是不值得让页面完全依赖于js,因为它不会破坏。加上Ajax请求将不必使用更多的CPU,从而在移动设备上使用更多的电池。
  • 历史实施可能更难。如果您在历史记录中来回走动,很可能页面将为空或者必须再次调用服务器来检索内容。

即使它有效,它仍然感觉它更像是一个黑客而不是坚实的代码。