【问题标题】:Codeigniter: Define JSON variable in controllerCodeigniter:在控制器中定义 JSON 变量
【发布时间】:2015-07-30 14:54:23
【问题描述】:

实际上我想在我的控制器中定义一个 json 变量并在我的js 文件中访问它。
我以前在 yii 框架中这样做:

Yii::app()->clientScript->registerScript('helpers', '                                                           
        yii= {                                                                                                     
           test: 'test'                                                                                                       
       };                                                                                                          
   ',CClientScript::POS_HEAD);

我可以在 js 文件中像 yii.test 一样访问它。
出于某种原因,我不想直接在视图页眉或页脚部分声明它。
提前致谢

【问题讨论】:

    标签: javascript php json codeigniter


    【解决方案1】:

    您可以为此构建一个端点并通过 AJAX 加载它。否则,将其打印在页面的某处(最好在<head> 中)几乎是将值从服务器传递到 JS 的唯一方法。

    另外,我不鼓励在 PHP 中手动编写 JSON 或 JS 对象。我建议您创建一个表示该对象的 PHP 数组/关联数组并使用 json_encode 将其转换为字符串。然后您可以在页面上打印或通过 AJAX 发送。

    【讨论】:

    • 非常感谢,我会等待任何其他答案,如果没有更好的答案,我会将此标记为正确。但是,如果您告诉我不这样做的原因,我将不胜感激。是因为关注点分离吗?
    • @HosseinShahsahebi 因为您可以编写格式错误的对象或使用引号。
    • 在实践中我遇到了一些问题。如果我想访问通过 AJAX 加载的全局变量,AJAX 调用必须是我页面顶层的synchronous,它会影响用户体验。我对么?你有什么建议吗?顺便说一句对不起,我不知道为什么我不能提到你。
    • @HosseinShahsahebi 如果你做 AJAX,它不需要是全局的,也不需要在 head 中。但是,需要这些值的代码需要在回调返回后调用的函数中执行。
    • @HosseinShahsahebi 视情况而定。如果它们太小,只需将它们打印在头部即可。如果它们是一堆实用程序数据,您可以将它们捆绑在一个 AJAX 调用中。如果每个都是合格的resources,那么它们应该作为restful端点存在。没有硬性规定,只是一个指导方针。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 2021-04-02
    • 1970-01-01
    • 2013-04-24
    相关资源
    最近更新 更多