Javascript 包含JSON数据是内联的还是来自单独的AJAX调用?

Javascript 包含JSON数据是内联的还是来自单独的AJAX调用?,javascript,ruby-on-rails,ajax,json,Javascript,Ruby On Rails,Ajax,Json,我在一个网站上工作,其中用户的“主页”包含一些数据,供一些广泛的JavaScript代码使用。目前,数据在文档体末尾的脚本标记中被编码为JSON对象,GUI控制对象随后被实例化,以便它可以访问DOM和JSON对象。我喜欢这种结构,因为它允许快速加载页面。它看起来像这样: <body> <script type="text/javascript" src="mylib.js"></script> <div>...lots of DOM and

我在一个网站上工作,其中用户的“主页”包含一些数据,供一些广泛的JavaScript代码使用。目前,数据在文档体末尾的脚本标记中被编码为JSON对象,GUI控制对象随后被实例化,以便它可以访问DOM和JSON对象。我喜欢这种结构,因为它允许快速加载页面。它看起来像这样:

<body>
  <script type="text/javascript" src="mylib.js"></script>
  <div>...lots of DOM and text content...</div>
  <script type="text/javascript">
    var userData = {...}; // Encoded by HTTP response handler.
    $(document).ready(function() {
      // GUI object which modifies form controls, etc.
      new MyGuiObject(userData, document.form.myForm);
    };
  </script>
</body>

…大量的DOM和文本内容。。。
var userData={…};//由HTTP响应处理程序编码。
$(文档).ready(函数(){
//修改表单控件等的GUI对象。
新的MyGuiObject(userData,document.form.myForm);
};
然而,新的功能可能要求userData对象作为单独的HTTP请求返回,这意味着内联表单将是重复的(并且违反了)。重构上述代码以对userData使用该AJAX请求很有诱惑力,但它引入了另一个对我们知道需要(并且可用)的数据的HTTP请求马上

是否值得更改代码以使用从AJAX调用中检索到的userData?如果是,那么对从中检索数据的URL进行编码的最佳实践是什么(考虑到由web框架动态生成会更好)

是否值得更改代码以使用从AJAX调用检索的用户数据

我不这么认为,但这将是一个意见的问题,在某种程度上取决于你的整体环境。这是一个判断

如果您有生成对象的底层代码(无论是在初始
脚本
元素中还是在响应ajax调用的后续元素中),那么您没有违反DRY原则

如果显示的HTML页面是完全静态的(因此可缓存),然后您将重复您自己的操作,因为您必须首先在HTML中创建对象,然后使用对ajax请求的动态响应再次创建它。但是,如果初始HTML已经动态生成,那么在这两种情况下,只需使用中心函数来生成对象。(该函数可以生成一个JSON格式的字符串,然后在HTML页面上只输出它前面的
var userData=
,因为JSON是JavaScript对象文本格式的子集,所以您可以将其放入对象文本有效的脚本中。)

不管是否干燥,我都不愿意在页面加载中添加一个可避免的HTTP请求

如果是的话,对从中检索数据的URL进行编码的最佳实践是什么

我不完全确定您对URL进行编码是什么意思。如果您指的是包含JSON的响应,只需将其与
内容类型:application/JSON
一起发送回即可。jQuery将理解这一点,并在将其交给
success
函数之前将其反序列化为一个对象

是否值得更改代码以使用从AJAX调用检索的用户数据

我不这么认为,但这将是一个意见的问题,在某种程度上取决于你的整体环境。这是一个判断

如果您有生成对象的底层代码(无论是在初始
脚本
元素中还是在响应ajax调用的后续元素中),那么您没有违反DRY原则

如果显示的HTML页面是完全静态的(因此可缓存),然后您将重复您自己的操作,因为您必须首先在HTML中创建对象,然后使用对ajax请求的动态响应再次创建它。但是,如果初始HTML已经动态生成,那么在这两种情况下,只需使用中心函数来生成对象。(该函数可以生成一个JSON格式的字符串,然后在HTML页面上只输出它前面的
var userData=
,因为JSON是JavaScript对象文本格式的子集,所以您可以将其放入对象文本有效的脚本中。)

不管是否干燥,我都不愿意在页面加载中添加一个可避免的HTTP请求

如果是的话,对从中检索数据的URL进行编码的最佳实践是什么

我不完全确定您对URL进行编码是什么意思。如果您指的是包含JSON的响应,只需将其与
内容类型:application/JSON
一起发送回即可。jQuery将理解这一点,并在将其交给
success
函数之前将其反序列化为一个对象

但是,新功能可能会出现 要求将userData对象 作为单独的HTTP请求返回, 这意味着内联表单将是一个 重复(和违反干燥标准) 原则)。重构很有诱惑力 上面的代码使用该AJAX 请求用户数据,但它 引入另一个HTTP请求 对于我们知道需要的数据(以及 可用)立即

内联表单不一定是复制信息。它允许用户开始查看对象,并且根据您提供的额外信息,如果用户禁用了JavaScript,它可能允许您的应用程序继续工作(因为JavaScript被认为只是增强了应用程序,尽管我知道从实践上讲,这在现代应用程序中已经很难实现了)。但即时查看表单(或表单的一部分)的能力是一个优势

So DRY不应意味着将某些东西简化到使应用程序缺乏性能或响应能力的程度。这些目标可能经常处于紧张状态,但您必须找到一个令人满意的中间立场。诚然,有时易于维护可能会导致性能下降,但在大多数情况下,您可能不希望这样做r用户因此而遭受痛苦

是否值得更改要使用的代码 从AJAX中检索的用户数据 打电话

听起来你在上面说这是必须的,不是吗?如果是的话,w