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

[讨论/交流] ajax怎么获取后台返回的数据

[复制链接]
发表于 2016-8-16 13:56:40 | 显示全部楼层 |阅读模式
ajax调用数据,取到数据后不能使用$this->load->view('页面',数据)而是用return 数据;对不对,可是页面调试的时候数据始终获取不了
发表于 2016-8-16 15:04:18 | 显示全部楼层
你这个问题还没有解决?上次的问题大家都回答的很清楚,自己应该思考一下就明白了。
我和@Hex的回答都直指问题的本质,你却还没明白。急于求成,不理解本质你会遇到更多的问题。

控制器里怎么能return, 需要echo。

实际上是不是 ajax 对于 PHP 来说是没区别的,ajax 输出 JSON,普通网页输出 HTML,本质上是没区别的,只是格式的区别而已。
所以,对于 CI 来说,输出皆视图,不管是 JSON 还是 HTML 都通过视图输出就可以了。
建议楼主多思考 HTTP 协议的本质。

评分

参与人数 1威望 +2 收起 理由
Hex + 2 支持!!

查看全部评分

发表于 2016-8-16 15:07:23 | 显示全部楼层
我是直接使用 echo 方式回傳,不過我的資料形態是json格式,
像這樣,echo json_encode('success');
或是,echo json_encode($data);
javascript那端因為是json 格式,也能直接使用,看要印出還是判斷都可以,
不過這應該不是標準的用法,只是個人習慣。
 楼主| 发表于 2016-8-16 16:15:10 | 显示全部楼层
yuzhigang5460 发表于 2016-8-16 15:04
你这个问题还没有解决?上次的问题大家都回答的很清楚,自己应该思考一下就明白了。
我和@Hex的回答都直指 ...

我明白你的意思,可是我才接触CI两周不到,此刻你说去分析本质重要还是先解决问题重要,先温饱再谈修养,你行就来个例子解答一下!
发表于 2016-8-16 16:29:25 | 显示全部楼层
yuzhigang5460 发表于 2016-8-16 15:04
你这个问题还没有解决?上次的问题大家都回答的很清楚,自己应该思考一下就明白了。
我和@Hex的回答都直指 ...

想說,終於有一個簡單的問題,能夠回答幫助解決,沒想到這個問題早已被大家回答過了,
只是發問者的學習心態,確實不答也罷....
发表于 2016-8-16 17:25:46 | 显示全部楼层
丘思甲 发表于 2016-8-16 16:15
我明白你的意思,可是我才接触CI两周不到,此刻你说去分析本质重要还是先解决问题重要,先温饱再谈修养, ...
PHP复制代码
 
$data = array(
  'aaa' => '1',
  'bbb' => '2',
);
 
echo json_encode($data);
 
复制代码


这个代码你能看明白吗?直接输出你的数据就可以了,其实很简单。
然后你在浏览器的调试工具里看一下返回值,然后在 ajax 里就可以直接使用了。
另外,你可以把你不能运行的代码发上来,大家可以帮你改,但是还是希望你能多思考,这样对你是有好处的。
发表于 2016-8-16 17:52:26 | 显示全部楼层
本帖最后由 Closer 于 2016-8-16 18:00 编辑
丘思甲 发表于 2016-8-16 16:15
我明白你的意思,可是我才接触CI两周不到,此刻你说去分析本质重要还是先解决问题重要,先温饱再谈修养, ...

HTTP 的基礎流程真的很重要
yuzhigang5460 : 控制器里怎么能return, 需要echo。

讓你以為是 :
success: function(){
    alert(<?php echo $result;?>);
}

很明顯看出對 ajax 流程的不熟




我用比較粗俗簡陋的說法來表示 ajax :

常見的傳輸資料方式不乏於 post / get,但兩種都會將原網頁帶往新的 route,並閃一下網頁 (重新讀取頁面)
但是若使用 ajax,則會帶來了更好的用戶體驗,為什麼?
因為不用閃一下網頁就能改變當前網頁一些特效、位置或數值 (css+jquery)
或者送一些行為數據到後台 (例如 : 紀錄使用者按下此 button 的次數)
所以我都戲稱他為「偷偷 post 的後門」




好,那你的問題在於流程不夠理解,這邊我大概說一下流程 :
PHP复制代码
 
// 這是原網頁
public function getStep() {
    return $this->load->view('xxx5');
}
 
 
// 這是 ajax 用的
public function postAjax() {
    $postValue = $this->input->post('test2');
    if ($postValue == '5678') {
        echo 'yes';
    } else {
        echo 'no';
    }
}
 
 
复制代码


JS复制代码
 
// 這是來自控制器 getStep 的 view xxx5
 
<script>
// 偵測 click 行為 ( jquery 1.7 以上版本)
$('#id123').on('click', function() {
    $.ajax({
        url: <?php echo $yourAjaxRoute; ?>,
        data: { 'test2': '5678' },
        type: 'POST',
        success: function(msg) {
            // 建議使用 console.log() 取代 alert()
            // 因為 alert() 會停止操作行為,而且沒辦法看物件化的數據
            // 請善用 F12 去查看 Console
 
            console.log(msg); // get value : yes
        }
    });
});
</script>
复制代码

本版积分规则