用户
 找回密码
 入住 CI 中国社区
搜索
查看: 1433|回复: 5
收起左侧

[版本 3.x] 使用ajax加载view

[复制链接]
发表于 2016-9-26 11:32:57 | 显示全部楼层 |阅读模式
我个人项目中左边有个导航栏,例如是1.2.3,分别对应右边div内放置3个不同的内容。
我原本想法是ajax调用,在success函数里面写上<?php $this->load->view();?>,以这种方式来加载view到指定div或者是在url对应控制器的方法中load view来加载。
后发现两种方法问题都是ajax调用load view实际上都是获取字符串,用$("#id").html(data)可解决。
不太明白为什么在控制器中load view会返回字符串而不是直接输出到浏览器。求解答一下,谢谢 T T。
js+php都是刚上手,如果哪里思路有点笨的话轻喷...
发表于 2016-9-26 11:41:57 | 显示全部楼层
 楼主| 发表于 2016-9-26 12:28:36 | 显示全部楼层
Closer 发表于 2016-9-26 11:41
請參閱 CI 論壇 - ajax怎么获取后台返回的数据

谢谢!看完之后对ajax的流程更加清晰了。
我还有一个不太理解的问题。希望您也能帮我解答一下,谢谢!
以下是文档中关于loader view第三个参数的描述:
第三个参数是**可选的**,用于改变方法的行为,将数据以字符串的形式返回, 而不是发送给浏览器。当你希望对数据进行一些特殊处理时,这个参数就非常有用。 如果你将这个参数设置为 TRUE,方法就会返回数据。这个参数的默认值是 FALSE, 也就是数据将会被发送给浏览器。如果你希望数据被返回,记得要将它赋值给一个变量:

这也是我最初的想法,使用ajax访问a控制器下的b函数,b中load view,ajax中success不写任何东西。原以为在load view的过程中,函数会将对应view文件中的代码发送到浏览器,浏览器解析。然后ajax同时获取了这部分html代码作为字符串,所以success中不做任何处理也可。实际却不行

而后查看loader.php中对应加载view的部分,奈何水平有限。。很多地方都不清楚实际的作用.
只大概看懂了return为true时会将缓冲区的内容赋给$buffer,然后清掉缓冲区。false应该就会执行ob_end_flush将缓冲区的内容直接送到浏览器(以上个人半吊子理解)。不太清楚是否正确。
如果这样的话不是应该只要ajax有执行到该函数,函数load view了就应该在浏览器中有显示吗?

谢谢版主!!
发表于 2016-9-26 15:16:01 | 显示全部楼层
Jay0816 发表于 2016-9-26 12:28
谢谢!看完之后对ajax的流程更加清晰了。
我还有一个不太理解的问题。希望您也能帮我解答一下,谢谢!
以 ...

我從未使用過 view 第三參數設為 true 這個功能
就手冊上提到的,下列說說我的認知 :
直接使用 view('xxx', $data) 將會 echo xxx.php 的內容

若將第三參數設為 true,則將 xxx.php 的 html 轉為字串存進變數內

就理解上,前者用 echo 後者用 return

如果你是要更換當前已讀取完的 html 頁面
再去做頁面特效或列表調整
Ajax 會比較適合你

 
 楼主| 发表于 2016-9-26 16:27:22 | 显示全部楼层
Closer 发表于 2016-9-26 15:16
我從未使用過 view 第三參數設為 true 這個功能
就手冊上提到的,下列說說我的認知 :

您这么一说后明白了许多,自己对于框架的认识还是太少。。
谢谢您的解答,麻烦您了!
发表于 2016-9-26 16:50:17 | 显示全部楼层
Jay0816 发表于 2016-9-26 16:27
您这么一说后明白了许多,自己对于框架的认识还是太少。。
谢谢您的解答,麻烦您了! ...

剛剛又再審視了一下你的問題
我剛剛的回答並不是那麼洽當
「Ajax 會比較適合你」這句話
其實與 view 第三參數無衝突
兩者應可共存

差別在於
用 Ajax 時呼叫的 Controller function
理論上,你的 html 可以放在 view('xxx', $data, true) 中處理比較正式
(假定你要呈現一個區塊的 view)

若不是,只是要回傳簡易的字串或資料內容
則不用特地送進一個 view() 處理完才返回
可以在 Controller 或 Model 處理完後就返回

 

本版积分规则