0

我正在尝试使用 shebang 实现 AJAX - 这意味着它example.com/#!/somepage.php只是example.com/somepage.php加载到 AJAX 站点的内容区域中。

这样做的明显方法是请求somepage.php然后用documentElement新文档替换整个内容。然而,这似乎有点违背 AJAX 的目的。

相反,我正在考虑尝试加载somepage.php,然后提取content页面的一部分并将其简单地放在内容区域中。

为此,我可以使用正则表达式来查找,/<div id="content">.*</div>/但这将是一个非常糟糕的主意(最简单的问题是“</div>结束内容?)。相反,我希望能够做类似的事情ajaxresponse.getElementById('content'),但是如何我会去转换ajaxresponsedocument(或documentFragment)对象吗?

或者这只是实现这种 AJAX 设置的错误方法?X-Requested-With: XMLHttpRequest让服务器端检查并只发回内容区域会更好吗?

4

2 回答 2

1

与其#!逐字请求 'd 页面,不如请求与您的处理程序兼容的变体#!

这种方法需要两个步骤。

  1. 通过 JSON 公开您的内容页面。使该服务可用于满足特定条件的请求,例如特殊的 get 参数、扩展名、标头等。例如,/somepage.php?json可能提供/somepage.phpJSON 中的内容。

  2. 编写您的#!处理程序,以便在处理请求时调用您在上面为该页面定义的服务。例如,当example.com/#!/somepage.php被加载并且您处理somepage.php,请求somepage.php?json,并酌情传播该请求的内容。

这种方法为您提供了许多好处。

  • 减少 AJAX 请求的响应大小
  • 减少服务器端负载,因为不需要呈现 HTML
  • 避免 HTML 解析和一些昂贵的 DOM 操作
  • 不依赖浏览器发送适当的 AJAX 相关标头
于 2012-06-05T05:58:50.620 回答
0

请注意,您实际上不需要使用正则表达式来从返回的数据中获取内容。例如,使用 jQuery,只需使用context$ 选择器的参数(live fiddle

$.get("/", {}, function(data){
    $("#text").append($("#login", data));
});​

另请注意,shebang 导航通常与一些 Javascript 框架相关联

于 2012-06-05T06:32:49.993 回答