我使用ajax 針對不同<a>
的連結做出不同的回應
一共有三頁 要輸出不同的內容 像是SPA那樣
<?php
session_start();
if ($_GET['token'] <> $_SESSION['token']){
echo json_encode(['auth'=>false]);
}else{
$item = $_GET['item'];
echo json_encode(['auth'=>true,'content'=>"<b>This is the content for ${item}</b>."]);
}
?>
這邊丟回一個content,裡面送出html,最後ajax那邊會有一個:
$('#content').html(data.content);
讓我主頁有一塊content裡面去放不同內容。
想問一下 針對不同的 $item
我是否要用if else去做Event Flow呢?
(讓頁面一 頁面二 頁面三 encode不同的content)
或是用switch其他的條件判斷?
關於php丟回來的content,該怎麼輸出大量的html比較好呢?
因為我ajax是用json接收
let data = JSON.parse(res);
虛擬代碼如下:
if 頁面一
echo content='<div class="w-50 p-3 mx-auto">'
echo content='<form id="loginform">'
echo content='<div class="another">'
if 頁面二
echo content='<div class="w-50 p-3 mx-auto">'
echo content='<form id="loginform">'
echo content='<div class="two">'
if 頁面N....
如果我要丟比較多行的html,難道要多行的echo,手動好幾行加上雙括號?
這樣的字串很不易編輯,又要小心單引號、雙引號的問題,
似乎是個難題。
以上,感謝各位前後端前輩。
提供參考
下面是邏輯跟樣板分開的作法
(雖然現在很多框架都幫我們處理了)
test.php?test=a
會輸出 a.php 頁面,a.php 可以接收一個 $text 的參數,當作字串輸出test.php?test=b
會輸出 b.php 頁面,b.php 可以接收一個 $arr 的參數,輸出成列表
test.php
<?php
function response($data, $param = []) {
switch(gettype($data)) {
case 'string':
if(file_exists($data)) {
extract($param);
include($data);
} else {
echo $data;
}
break;
case 'array':
header('Content-Type: application/json');
echo json_encode($data);
break;
default:
http_response_code(500);
}
exit();
}
$text = '測試';
$arr = ['Hello', 'world'];
if(isset($_GET['test'])) {
switch($_GET['test']) {
case 'a':
response('a.php', [
'text' => '這段文字來自參數'
]);
break;
case 'b':
response('b.php', [
'arr' => [
'Happy',
'Day'
]
]);
break;
}
}
response([
'status' => 'error'
]);
a.php
<!DOCTYPE html>
<html lang="zh-Hant-TW">
<head>
<meta charset="UTF-8">
<title>a.php</title>
</head>
<body>
text 的值為 「<?php echo $text;?>」
</body>
</html>
b.php
<!DOCTYPE html>
<html lang="zh-Hant-TW">
<head>
<meta charset="UTF-8">
<title>b.php</title>
</head>
<body>
<ol>
<?php foreach($arr as $str):?>
<li><?php echo $str;?></li>
<?php endforeach;?>
</ol>
</body>
</html>
想問一下 針對不同的 $item 我是否要用if else去做Event Flow呢?
(讓頁面一 頁面二 頁面三 encode不同的content)
或是用switch其他的條件判斷?
多個且單一判斷的話用 switch
多重判斷還是使用IF ELSE
如果條件判斷很固定規則的話,就是寫成 function 。
關於php丟回來的content,該怎麼輸出大量的html比較好呢?
因為我ajax是用json接收
一般會建議用text來接受html格式資料。比較不容易出事。
json要轉換html後又要轉換回來會有點麻煩。
不過,其實現在也盡量不要直接取得html後再更換掉。
瀏覽器容易爆。
盡量還是單純點,只取得資料。html固定。
學一下 template 這個元件的用法。
這無論在 JQUERY 或是VUE都會用的到。
先用 template 去建立好可能會用到的html
在AJAX上只取資料出來後。再帶入對應的 template 後才秀出。
盡量不要用後端去送出 html。