1

我的场景是这样的——用户请求主页,然后页面的 javascript 代码对同一服务器执行 ajax GET 请求以获取一些对象。

服务器将主页保存为翡翠模板。

所以,现在加载主页需要两次往返:

  1. 获取主页
  2. 获取 JSON 对象

我可以接受,但只是出于好奇——我有哪些选择可以将稍后请求的对象合并到主页的初始 GET 请求中?

我看到一种方法是有一个隐藏的 html 元素,它的内部 HTML 将是对象的字符串表示。有点尴尬,但在服务器端非常简单,因为主页玉模板无论如何都经过预处理。

我还有哪些其他选择?

请注意,我非常清楚节省这一次往返并不重要。我只是对这些技术感到好奇。

4

3 回答 3

0

另一种选择是始终返回一个 JSON 对象,然后主页的 HTML 将是该对象上某些属性的值。不过,这可能需要对您的客户端逻辑进行一些更改。

另一种选择:主页代码可以包含一个脚本块,而不是包含 JSON 字符串的隐藏 HTML 输入/文本区域,其中将对象文字声明为变量。像这样的东西:

<script>
var myObj = ... // Your JSON string here.
                // myObj will be an object literal, and you won't need
                // to parse the JSON.
</script>
于 2012-11-08T12:12:20.137 回答
0

初始 GET 请求将仅检索该文档。您可以在页面底部加载定义为脚本的附加文档,因此您无需为初始加载执行 XHR。

例如:

GET /index.html
//At the bottom you have a <script src="/somedata.js"></script>

GET /somedata.js
//here you define you var myObj = {}.... as suggested by bfavertto

根据您使用的服务器端技术,这可能是例如在 MVC3 中

public partial class SomeDataController : BaseController
{
    public virtual ContentResult SomeData()
    {
        var someObject = //GET the JSON
        return Content("var myObj = " + someObject, "application/javascript");
    }
}
于 2012-11-08T12:17:36.517 回答
0

您可以将 Json 数据嵌入 HTML 中的隐藏标记中。在运行时,您的 javascript 会从此隐藏标记中读取数据,而不是进行 Json 调用(或在此数据不可用时进行调用)。

<!--the contents of this div will be filled at server side with a Json string-->
<div id="my-json-data" style="display:hidden">[...json data...]</div>

准备好文件:

var jsonStr = document.getElementById( "my-json-data" ).innerHTML;
于 2012-11-08T13:34:07.363 回答