學習JSON、ajax中的一些問題
1.普通陣列轉換為JSON陣列格式
例如:
普通陣列為:$arr = array('name' => 'likui' , 'age' => 30);
轉換為JSON格式陣列使用: $json = json_encode($arr);
輸出:{"name":"likui","age":30};
php 5.4.0之前,json_encode() 是不支援 中文編碼的 5.4.0之後,json_encode()新增了 JSON_UNESCAPED_UNICODE 選項,支援了中文,
例如:$arr = array('name' => '張三' , 'age' => 30);
$json = json_encode($arr,JSON_UNESCAPED_UNICODE),輸出獲得漢字的編碼,而不直接是漢字。為了方便記憶,此選項可以簡寫為256
2.在資料庫中儲存的時候,JSON格式的陣列,可以直接寫入到資料庫,到時拿出來的時候進行轉換就可以正常使用。
例如:資料庫中又一條記錄儲存為{"name":"likui","age":30};
當我們拿出來需要轉換成資料並且使用的時候,就需要使用到json_decode()
具體使用如下:$jsonStr = {"name":"likui","age":30};
$arr = json_decode($jsonStr,true);
其中,為true時,返回array格式。
false時,返回物件格式:object(stdClass)#16 (2) { ["name"]=> string(8) "the name" ["age"]=> int(30) };
3.ajax方法提交表單
$.ajax({name:value, name:value, ... })
該引數規定了ajax請求的一個或多個名稱/值對。
當我們平時提交表單資料的時候,可以直接使用post和get型別。
例如:jq.post和jq.get
4.在我們使用ajax提交,並且返回json資料,判斷表單是否提交成功。
在我們使用的thinkphp框架中,$this->success()會自動判斷我們是否使用ajax進行提交,success中引數有:資訊、跳轉地址、是否是ajax。例如$this->success('成功',U('index'),true)。當為true時,返回ajax資訊,交由前臺判斷處理,資訊如下:
{"info":"\u6210\u529f","status":1,"url":""}
當為false時,status為0
前臺通過ajax的回撥,獲得status引數,可以聯合layui來返回給使用者成功或錯誤資訊。
jq.post('{:U("jinji")}',id,function (json) {
layer.close(loadIndex);
if (json.status == 1) {
layer.msg(json.info, {icon: 1, time: 1000}, function () {
location.reload();//do something
});
} else {
layer.msg(json.info, {icon: 2, anim: 6, time: 1000});
}
console.log('提交成功');
},'json');