2011-11-16 49 views
2

我需要将一些数据发送到网页,理想情况下使用json格式,并且我想知道哪种方法最好,以及为什么。总体而言,你与他们有什么好的或不好的经历和惊喜。在创建时将JSON发送到页面的最佳方式

  1. <script>var myJson = <? echo json_encode($myVar); ?>;</script>

    优势:JSON是直接在JavaScript中,是将使用它。
    不方便:在html/dom中间的<script>是坏的(js属于 到.js文件)。

  2. <div data-myJson='<? echo json_encode($myVar); ?>'>

    优势:HTML5数据事情是容易的工作。
    不方便: 在dom中的一堆数据,它看起来并不优雅注:在我的 的情况下,我可以承受忽略“旧”浏览器。

  3. ajax应有尽有。

    优点:在这种情况下甚至不需要发送json,因为它 已经可用(无页面更改)。
    不方便:不是 真的是一个选项,因为我需要重写整个网站。

  4. 代替发送完整的json,将它存储在会话中并发送一个 密钥。

    优点:少移动数据
    不方便: 数据/会话情侣需要跟踪,我喜欢我的会议保持干净整洁。 (即使用户只是在流程完成前关闭该页面)(不会关闭会话)。

  5. 饼干。

    优点:herr ..是逆向邪恶的好东西吗?
    不方便:像会话变量,但出笼。

  6. 在会话中存储json,并在加载页面时加载jjax。

    优点:概念上有点高雅。
    不方便:沉重,因为ajax指令已将 添加到js文件中,并且必须管理该会话。 (和 已清理。如果页面加载没有完成,json将一直保留,直到我清理它或会话结束为止 )。再加上html header意味着更多的带宽,我们必须等待使用该对象的成功。

  7. 其他?

编辑:因为似乎有点混乱,有选择3“阿贾克斯的一切”,我的意思一个页面加载,并所有内容通过AJAX加载,即使你通过菜单,指向其他页面的链接,表单提交等。我认为更传统的导航(由服务器作为新页面发送的页面),页面做一个ajax请求来检索服务器上的某个值(这里是我的json对象),作为第4点“会话”,作为主页数据必须在页面发送后由服务器保留,以便稍后由ajax请求获取。我为此添加了选项6。

+0

第一个变体(I.E.函数调用,而不是变量赋值)很常用(例如:facebook),它属于.js文件而非JSON。顺便说一句,你不需要'JSON.parse'。 – Esailija

+0

#1看起来有点难看,但我没有看到为什么它不能解决问题的原因,当然,如果JSON对象在页面的生命周期内不会改变的话。 – Blazemonger

+1

谷歌在其谷歌加服务使用类似于您在自己的'变种OZ_initData'做(你可以看到,如果您查看网页的源代码),但数据是不完全的JSON,但不知何故类似于1号建议的东西。 – Nasreddine

回答

6

我毫不犹豫地推荐#1。你想在JavaScript中使用你的数据,对吧?当页面加载时,#1是确保数据存在的最简单方式和最直接的方式,就像一个普通的javascript对象。我一直以这种方式将数据从服务器端传输到浏览器端,并且工作起来非常漂亮。

你可以说是在一个Ajax调用加载数据创建您的数据和用户界面之间更好地分离,但是这是一个额外的HTTP请求,这会减慢你的页面加载。

+0

+1,但解释#1与UI有什么关系。如果用ajax调用取代#1,代码将变得更加复杂。如果我们假定#1与JSONP风格的回调而不是变量赋值一起使用,那么它就不会与它交互,它会自动发送到适当的处理程序。 – Esailija

+0

Re:与用户界面相关 - 如果你无法忍受你的html页面中的javascript的想法,你可以通过ajax调用来获得更干净的东西。我个人绝不会这样做。 – morgancodes

0

去过几年,因为这是要求,但对于其他人谁在这里找到自己和好奇,我一直在做的选项#1的变化相当长一段时间。此外,Nike Plus也是如此。当页面加载后,耐克将window.np = {}

我从来没有真正找到了一个会议上,我的爱,但我已经试过:

window.data

window.app.data(由Symfony的启发,从字面上使用属性app

window.[app_name].data(耐克加上启发)

window.initData(由Google+启发)

就我而言,我覆盖这些JS对象与骨干型号/时的主要骨干应用程序加载的集合。

相关问题