HTML5 ~= HTML + Javascript + CSS3
type="text"
type="number"
type="email"
type="tel"
localStorage['abc'] = 123;
alert(localStorage['abc']);//123
<html manifest="cache.appcache">
window.applicationCache.addEventListener('updateready', function(e) {
if (window.applicationCache.status == window.applicationCache.UPDATEREADY) {
window.applicationCache.swapCache();
if (confirm('A new version of this site is available. Load it?')) {
window.location.reload();
}
}
}, false);
CACHE MANIFEST
# version 1.0.0
CACHE:
/html5/src/logic.js
/html5/src/style.css
/html5/src/background.png
NETWORK:
*
cache.appcache:
更多CSS3 DEMO:http://slides.html5rocks.com/#css3-title
<style>
/*全部的使用者都會載入這裡的 CSS。*/
@media screen and (min-width: 1200px) {
/* 如果使用者之視窗寬度 >= 1200px,將會再載入這裡的 CSS。*/
}
@media screen and (min-width: 768px) and (max-width: 979px) {
/* 如果使用者之視窗寬度介於 768px ~ 979px,將會再載入這裡的 CSS。 */
}
@media screen and (max-width: 767px) {
/* 如果使用者之視窗寬度 <= 768px,將會再載入這裡的 CSS。 */
}
@media screen and (max-device-width: 480px) {
/* 如果使用者之裝置寬度 <= 480px,將會再載入這裡的 CSS。 */
}
</style>
<link rel="stylesheet" type="text/css" href="b.css" media="screen and (min-width: 768px) and (max-width: 979px)">
<!--[if lt IE 9]>
<script src="html5shiv.js"></script>
<![endif]-->
<html>
<head>
<style>blah { color: red; }</style>
<script>document.createElement("blah")</script>
</head>
<body>
<blah>Hello!</blah>
</body>
</html>
原理
EX : 新聞網頁
EX : 要用到藍芽的APP
只需要維護一套程式碼,就能發佈到多個平台
無邊框瀏覽器、將HTML包裝成APP、
提供API存取裝置功能
HTTP Method
<input type="hidden" name="_method" value="PUT" />
JSON:目前主流:格式簡單,相容性高,可讀性高
<?php
//記得送檔案格式、編碼
header('Content-Type: application/json; charset=utf-8');
//允許跨網域
header('Access-Control-Allow-Origin: *');
$data = array(
'Contacts' => array(
array(
'FirstName' => 'lai',
'Name' => 'jackai',
'age' => 18
),
array(
'FirstName' => "</script><script>alert('hacked');//'",
'Name' => 'def',
'age' => 15
)
)
);
//編碼輸出,轉換特殊字元成16進制
echo json_encode( $data ,JSON_HEX_TAG);
//{"Contacts":[{"FirstName":"lai","Name":"jackai","age":18},{"FirstName":"\u003C\/script\u003E\u003Cscript\u003Ealert('hacked');\/\/'","Name":"def","age":15}]}
複雜資料結構處理方法:先包成JSON
var object = {"key":"value","array":[1,2,3]};
$.ajax({
url:"xxxx",
data:{
"object":JSON.stringify(object)
},
onSuccess: function(data){
},
error: function(data){
}
});
<?php
$obj = json_decode($_POST["object"]);
http://example.com/API/Module/Method/
方式1 會比較簡單,不用記住多種格式
var object = {
title : "this is a title",
data : "<div>xxxx</div>"
user_id : 123
};
{
id : 1000,
title : "this is a title",
data : "<div>xxxx</div>"
user_id : 123,
code : "success"
};
http://example.com/API/Message/Add
var object = {
id:1000
};
{
id : 1000,
title : "this is a title",
data : "<div>xxxx</div>"
user_id : 123,
code : "success"
};
http://example.com/API/Message/Read
var object = {
q : "查詢字串"
};
{
datas : [
{
"id" : 1000,
"title" : "xxxxxxxx"
},
{
"id" : 1001,
"title" : "xxxxxxxx"
}
]
code : "success"
};
http://example.com/API/Message/Search
var object = {
id : 1000,
title : "this is a title",
data : "<div>xxxx</div>"
user_id : 123
};
{
id : 1000,
title : "this is a title",
data : "<div>xxxx</div>"
user_id : 123,
code : "success"
};
http://example.com/API/Message/Update
var object = {
ids : [1000,1001,1002],
user_id : 123
};
{
id : 1000,
code : "success"
};
http://example.com/API/Message/Delete
透過 mod_rewrite去實現
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteRule /?(.*) index.php?action=$1 [L,QSA]
.htaccess
如果是用IIS應該會是在web.config檔內設定
<!DOCTYPE html>
<html lang="zh-Hant-TW">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="index.js"></script>
</head>
<body>
<input type="button" onclick="ajax_data();" value="查詢資料" />
<table id="data_output" border="1">
<thead>
<tr>
<th>英文名字</th>
<th>中文名字</th>
<th>性別</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</body>
</html>
function ajax_data(){
$.ajax({
url:'/user/list',
data:{
"data":$("#data_input").val()
},
type:"POST",
dataType:"json",
success: function(data){
console.log(data);
$("#data_output tbody").html('');
for(var i in data.items){
var html = '<tr><td>' + data.items[i].eng_name + '</td>';
html += '<td>' + data.items[i].chinese_name + '</td>';
html += '<td>' + data.items[i].sex + '</td></tr>';
$("#data_output tbody").append(html);
}
}
});
}
<?php
$data = array();
if(isset($_GET['action']))
switch ($_GET['action']) {
case 'user/list':
$data = get_user_list();
# code...
break;
default:
# code...
break;
}
//送檔案格式、編碼
header('Content-Type: application/json; charset=utf-8');
//允許跨網域
header('Access-Control-Allow-Origin: *');
//編碼輸出,轉換特殊字元成16進制
echo json_encode( $data ,JSON_HEX_TAG);
<?php
function get_user_list(){
return array(
'items' => array(
array(
'eng_name' => 'Jack',
'chinese_name' => '捷克',
'sex' => '男'
),
array(
'eng_name' => 'Rose',
'chinese_name' => '羅絲',
'sex' => '女'
)
),
'code' => 'success'
);
}