台灣最大程式設計社群網站
線上人數
976
 
會員總數:242760
討論主題:187724
歡迎您免費加入會員
討論區列表 >> AJAX / JSON / jQuery >> AJAX與PHP傳遞資料的問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
AJAX與PHP傳遞資料的問題
價值 : 20 QP  點閱數:220 回應數:2

樓主

周業惇
門外漢
0 1
42 1
發送站內信

我有一個表單上面有2個下拉式選單要互動
兩個下拉式選單的資料內容都來至資料庫
第一個是系統
第二個是設備
在資料庫中系統TABLE的Primary Key是設備Table的Foreign Key
因此我希望在我用下拉式選單選擇系統時,設備的夏拉式選單會只剩下該系統的設備而不是全部,但是了很久都無法順利的達成,中間爬了許多資料跟修改的多次還是不行,請各位神人大大幫我看一下提示我方向吧
我的程式分成兩支,寫法如下:(連結資料庫的程式我就沒有貼了因為在別的地方測試沒有問題)
下拉式選單的php
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>選擇表單</title>
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
</head>
<body>
<?PHP
include("SQL_Database.php");
?>
<form action="mtwatertable.php" method="post" name="mttable">
點檢選擇系統:
<select name="system" id="system">
<?PHP
foreach ($query_system as $systeminfo){
echo "<option value= ".$systeminfo['sysID'].">".$systeminfo['sysName']."</option>";
}
?>
</select><p>
選擇點檢設備:
<select name="equipment" id="equipment" >
<option value= "">--請選擇設備--</option>
</select><p>
<script type="text/javascript">
$('select[name=system]').change(function(){
var system_eq = $(this).val();
$ajax({
url:'ajax_system.php',//url:'撈資料的php'
cache:false,
type:'post',//'post'
fileElementId:'file',
data:{"system_eq":system_eq},//{"傳送變數的名稱":傳送變數的值}
dataType:'json',
//beforeSend :function(){},//function 執行前的程式
success:function(data){
var datalength = data.length;
$('select[name=equipment]').html('<option value="">----請選擇----</option>');//連動的選單
for (a = 0;a<datalength;a++) {
$('select[name=equipment]').append('<option value="'+data[a]["equipID"]+'">'+data[a]["equipName"]+'</option>');//
}
},
error:function(){
alert("錯誤");
}
});
});
</script>
<input name="送出" type="submit" value="送出">
</form>
</body>
</html>

撈資料的php ajax_system.php程式碼如下
<?PHP
include("CMUHconndata.php");
//==========(接收資訊)===========//
$systemNo = $_REQUEST["system_eq"];
//==========(作品分類)===========//
$sql_equipment="SELECT equipID,equipName FROM FA.Equipment_System WHERE sysID = $systemNo";
$query_equipment =$pdo->query($sql_equipment);//->fetchAll()
$equipment_num="SELECT COUNT(equipID) FROM FA.Equipment_System WHERE sysID = $systemNo";
$equipment_total_num =Current($pdo->query($equipment_num)->fetch());
$data = '[';
for ($a=0; $a < $total_records; $a++) {
$worktyperow=$query_equipment->fetch(PDO::FETCH_ASSOC);
if($a != ($equipment_total_num-1)){
$data.='{"work_type":"'.$worktyperow["equipID"].'","type_name":"'.$worktyperow["equipName"].'"},';
}
if($a == ($equipment_total_num-1)){
$data.='{"work_type":"'.$worktyperow["equipID"].'","type_name":"'.$worktyperow["equipName"].'"}';
}
}
$data.=']';
echo $data;
?>

搜尋相關Tags的文章: [ php ] , [ ajxa ] , [ jquery ] , [ json ] ,
本篇文章發表於2018-02-22 15:41
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
作者回應

周業惇
檢舉此回應
我有測試方式如下
分別測試都沒有問題
我在
var system_eq = $(this).val();
這行之後加入
document.write(system_eq)
然後執行會顯示我要的數值

在測試單獨執行ajax_system.php的網頁(url:'ajax_system.php')
將原本的
$systemNo = $_REQUEST["system_eq"];
改成
$systemNo=1直接給直
這頁出現的結果也沒錯

echo $data會顯示
[{"XXX":"OOO"},{"XXX":"OOO"},{"XXX":"OOO"},{"XXX":"OOO"}]

然後回到前一頁
整個執行就是無法連動
我在
success:function(data){ }
之後加入
document.write(data)
也完全沒反應

感覺像是我的東西沒有丟到ajax_system去執行
或是
ajax_system產生的結果沒有丟回來給json接

是不是我要下載甚麼外掛或是連結到甚麼地方去嗎??

還是我段的<script>xxxxxxx</script>擺的位置有差呢??
本篇文章回覆於2018-02-22 15:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

迷路
捐贈 VP 給 迷路 檢舉此回應
首先,請愛用程式標籤
這樣真的很難看

PHP有函數json_encode()可以直接將陣列轉換成JSON字串
但要注意中文字會出問題,需要用urlencode和urldecode兩個函數來輔助
請愛用函數來產生JSON字串,這能避免很多格式錯誤的問題

要在success中顯示回傳值請使用
console.log(data)
無論顯示的內容是字串、陣列還是物件都能顯示,是除錯的好幫手
具體說明請自行Google

最後,問題的癥結點,我猜是這裡
for (a = 0;a<datalength;a++) {
$('select[name=equipment]').append('<option value="'+data[a]["equipID"]+'">'+data[a]["equipName"]+'</option>');//
}
改成這樣試試看

本篇文章回覆於2018-02-22 17:22
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.