這是小弟發(fā)的第一篇文章,文筆略差望大家見諒,
若有錯誤或需補充的地方在評論下方回復(fù)即可
前端與服務(wù)器端之間的通訊
目前大多數(shù)前端與服務(wù)器端之間的接口都是基于http或者https協(xié)議進行實現(xiàn)苦蒿,而兩者之間大多數(shù)都是通過json或者xml格式進行encode和decode(當然,socket又是另外一回事)礼预。這里先講如何使用json格式來進行通信第步。
基本上解析json的情況包含4種:
- 解析Person單個對象類型的json數(shù)據(jù)
{"Person":{"name":"zhangsan","age":"23"}}
- 解析list集合里的一堆對象list<Person>:
{"Person":[{"name":"zhangsan","age":"23"},{"name":"lisi","age":"24"}]}
- 解析list集合里的多個字符串list<String>
{"City":["Beijing","Shanghai","Guangzhou"]}
- 解析list和Map的嵌套使用,Map<list<Map<String,Object>>>
{"Company":{"Market":[{"name":"zhangsan"},{"name","lisi"}],"IT":[{"name":"xiaohong"},{"name":"xiaoming"}]}}
在這里想推薦兩個工具:
- json.cn:json字符串進行解析
- postman:chrome上的一個插件,可以很方便地測試接口
接下來喻频,前端把服務(wù)器端發(fā)送過來的json字符串轉(zhuǎn)換成對應(yīng)的字典對象即可進行使用缩宜。
CI框架簡單介紹
CI框架是基于PHP的一個入門級框架,上手簡單半抱,基于MVC架構(gòu)脓恕,且擴展性比較強,CI有中文的官方網(wǎng)站和文檔窿侈,對于PHP新手想學(xué)習(xí)框架的話是個不錯的選擇炼幔。
在這里服務(wù)器的環(huán)境搭建之類的就不說了,百度有一大堆教程史简,XAMPP乃秀、LAMP或者WAMP可根據(jù)操作系統(tǒng)進行選擇。
廢話少說圆兵,能直接上代碼不跺讯?
好,我們來實現(xiàn)個最簡單的注冊功能
- 先連接數(shù)據(jù)庫殉农,僅需簡單配置一下即可
打開您的CI工程
->application
->config
->database.php
配置如下:
<code>
$db['default']['hostname'] = '您的數(shù)據(jù)庫地址';//本地數(shù)據(jù)庫則為localhost
$db['default']['port'] = 3306;//數(shù)據(jù)庫的端口刀脏,一般為3306
$db['default']['username'] = 'root';//用戶名
$db['default']['password'] = 'root';//密碼
$db['default']['database'] = 'test';//數(shù)據(jù)庫名稱
$db['default']['dbdriver'] = 'mysqli';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';//排序規(guī)則
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
</code> - 創(chuàng)建一個控制器
打開localhost/phpadmin
->創(chuàng)建數(shù)據(jù)庫名為test
->創(chuàng)建一個user表
->分別創(chuàng)建id(primary主鍵,auto_increment自動增加超凳,unsigned int)愈污、username(varchar50耀态,unique唯一)、password(varchar50)
->打開您的CI工程
->application
->controllers
->創(chuàng)建一個文件Test.php
這里就不敘述如何使用phpadmin來設(shè)置信息暂雹,百度就有
Test.php代碼如下:
<code>
<?php
class Test extends CI_Controller {
public function register() {
//isset表示這個變量是否存在
if (isset($_POST['username'])&&isset($_POST['password'])) {
$this->load->database();//加載數(shù)據(jù)庫類
$username = $_POST['usernam'];//獲取傳上來的username
$password = $_POST['password'];//獲取傳上來的password
$sql = "SELECT username FROM user where username = ?";
$user = $this->db->query($sql,array($username));//執(zhí)行sql語句
$user = $user->result_array();//轉(zhuǎn)換成數(shù)組
if (count($user) == 0) { //數(shù)量為0首装,即表示用戶不存在
$sql1 = "INSERT INTO user(username,password) VALUES(?,?)";
$this->db->query($sql1,array($username,$password));//插入
$id = $this->db->insert_id();//獲取插入的行號,即id
$user = $this->db->query($sql,array($username));
$user = $user->result_array();//再查詢一次數(shù)據(jù)庫
if (count($user) != 0) {//如果有數(shù)據(jù)杭跪,即表明插入成功
$viewArray = array("jsonArray" => $user[0]);//獲取數(shù)組第一個對象仙逻,即插入成功的用戶信息
ob_start();//開啟緩存
$this->load->view('json',$viewArray);//輸出信息到j(luò)son.php視圖
ob_end_flush();//關(guān)閉緩存
exit();//退出
}
}else{
$viewArray = array("errorMsg" => "user exist");//打印錯誤信息
$this->load->view("jsonerror", $viewArray);
return;
}
}
}
}
?>
</code> - 因為是MVC架構(gòu),輸出則由View來負責(zé)涧尿,創(chuàng)建一個View視圖
打開您的CI工程
->application
->views
->創(chuàng)建一個文件json.php
json.php代碼如下:
<code>
<?php
header('Content-type: application/json');//通信頭設(shè)置
$outputarray = array('status' => 'OK', 'data' => $jsonArray);
echo json_encode($outputarray);//數(shù)組轉(zhuǎn)json系奉,然后echo輸出
</code>
但為了打印輸出錯誤信息,同時需要另一個View視圖
打開您的CI工程
->application
->views
->創(chuàng)建一個文件jsonerror.php
jsonerror.php代碼如下:
<code>
<?php
header('Content-type: application/json');
$outputarray = array('status' => 'error', 'msg' => $errorMsg);
echo json_encode($outputarray);
</code>
輸出結(jié)果
若正確輸出现斋,則結(jié)果為:
<code>
{"status":"OK",
"data":{
"id":1,
"username":"zhangsan",
"password":"123"
}}
</code>
若用戶已存在喜最,則結(jié)果為
<code>
{"status":"error",
"msg":"user exist"}
</code>