台灣最大程式設計社群網站
線上人數
686
 
會員總數:245021
討論主題:188965
歡迎您免費加入會員
討論區列表 >> AJAX / JSON / jQuery >> AJAX 連動下拉選單 取不到值 return 'undefined'
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
AJAX 連動下拉選單 取不到值 return 'undefined'
價值 : 50 QP  點閱數:1988 回應數:10

樓主

Fredy
門外漢
0 5
96 10
發送站內信

各位大大 因為不熟卡了很久 所以想請教大家
我去實作了 看起來比較簡單的 簡易版PHP +AJAX下拉選單
http://whccchi.blogspot.tw/2015/11/phpajax.html
我大致針對我的資料表 修改了SQL語法
第一層下拉選單 用資料庫查詢出來沒問題

也大概知道原理是

第二層選單GET第一層選單選取的值 當作SELECT的條件 再將查詢出來的結果回傳回去給第二層下拉選單呈現
可是不知道是不是語法有錯誤
第二層AJAX response 雖然是success 不過都顯示"undefined" <--Q1
爬文過也試過加上"async:false"還是一樣"undefined"

我是在做一個新增資料的表單
因為資料表欄位的關係
所以想順便問如何分別取得 這兩層選單 選取的值 <--Q2

請有空的大大幫幫我 感恩!!

index.php AJAX部分


action.php

搜尋相關Tags的文章: [ AJAX ] ,
本篇文章發表於2016-02-25 18:30
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
最有價值解答

clouding
捐贈 VP 給 clouding 檢舉此回應
嗨早安

1. 可以用瀏覽器F12 看console response 來DEBUG 慢慢一步一步往前推來找看看問題在哪

2. async:false 就是同步 預設是 true AJAX會做完一個才會在去做下一個

3.通常AJAX 結尾 我都用 exit 用 return 好像怪怪的

4. 通常 script 應該都放在 head 之間 php 程式碼 跟 js 分開寫會比較好, 日後也比較好維護

我寫了一個小範例 你可以參考看看


ajax.php






index.html


本篇文章回覆於2016-02-26 10:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

Daimom
捐贈 VP 給 Daimom 檢舉此回應
是哪個變數underdefined?
用console.log(result);
將回傳的值印出來。
本篇文章回覆於2016-02-26 10:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

Fredy
檢舉此回應
TO clouding大
剛剛try了您的範例
可以成功AJAX
不過我還是有個問題想請問您
"如何下SQL語法 撈出像測試資料那種陣列形式"
我會卡住的點是因為 如我#1範例 我第二層選單 需要第一層選單的選取值 才會下WHERE smallcat="選取值"

我的資料表(EX)
code:流水號
bigcat:大分類代碼 (INT)
smallcat:小分類代碼 (INT)
bigcat_value:大分類對應的文字(VARCHAR)
smallcat_value:小分類對應的文字(VARCHAR)

對應陣列應該像這樣
$arr = array(
"bigcat_value" => array(smallcat_value, smallcat_value),
"bigcat_value" => array(smallcat_value, smallcat_value),
"bigcat_value" => array(smallcat_value, smallcat_value),
);
還有我#1的問題 就是該怎麼取到這兩個選單的"選取值"(資料表的bigcat和smallcat)
因為我要這兩個值查詢出對應的流水號代碼(code)
請教教我 感謝!!

TO Daimom
用console.log(result);印出來是cat2_value 這個變數
他是"小分類對應的文字" 即第二層選單對應的文字
謝謝
本篇文章回覆於2016-02-26 12:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
不錯的參考

Daimom
捐贈 VP 給 Daimom 檢舉此回應
可以用post或get的方式取值
參考:http://m3fu0.blogspot.tw/2011/06/jquery.html
上面是使用post的方法,GET的話記得在url後面接參數就好了。

所以是哪個元件 undefined ?

像這樣的訊息
Uncaught TypeError: Cannot read property 'combo' of undefined
本篇文章回覆於2016-02-26 13:54
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
不錯的參考

clouding
捐贈 VP 給 clouding 檢舉此回應

讓我想一下你的問題
你的問題應該是,你想要在載入頁面的時候就把相對應陣列整理出來
然後你不知道代碼跟名稱要放在哪怎麼取值得到流水碼

1.如果要這麼做,可能就單純土法煉鋼,全部資料抓出來迴圈跑一個一個處理丟到相對應的陣列就有你要的效果了

2.你說應該不知道值要怎麼取怎麼放吧,你可以


這樣直接取兩個欄位的ID值 在去抓取你要的流水號就好了
前提時你的資料流水號跟你的資料類型都沒有重複
本篇文章回覆於2016-02-26 14:14
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

clouding
捐贈 VP 給 clouding 檢舉此回應
我還有個問題
要查流水號
不能直接用bigcat_value 和 smallcat_value 查到嗎?
本篇文章回覆於2016-02-26 14:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
大致上幾個問題跟你說。
不過怎麼好像看這程式碼很熟的樣子@@"

1.17~20行的部份。可以改用$.each來處理。不需要用while

2.回傳的php值。因為你的ajax宣告接收的是json,需要統一都是回傳json格式。所以你的php程式碼的第15行輸出一個0。非json的格式。
這樣回到ajax那邊是會出錯的。
本篇文章回覆於2016-02-26 14:39
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
難怪我覺得程式碼很熟,原來你有在php問過了。
我不是後面有告訴你一些改寫的動作?

怎麼沒聽進去,還在這堸郊替薵漱ㄙ器D原因在哪啊??
在那我不是已經告訴你問題在哪了嗎?
本篇文章回覆於2016-02-26 14:49
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

Fredy
檢舉此回應
我正在改 先回復一下

TO Daimom大
應該說result回傳的console log是正常的json格式
[{"cat2_value":"XXX"},{"cat2_value":"XXX"},{"cat2_value":"XXX"}]
不過我第二層的下拉式選單 全都是undefined而且好幾十筆 筆數也不對@@

那個範例之前有找到 不過當時沒try成功
我想說先找簡單一點的例子 比較看得懂
謝謝

TO clouding大
會這樣做是因為我是有兩個資料表 有共同欄位"code"
我現在在做新增的表單 所以我要利用bigcat 和 smallcat兩個選取值 查詢code代碼
然後新增code代碼到另一個資料表
目前只想到這個做法

您說的土法煉鋼 迴圈處理丟掉相對應陣列 的方法 是像這樣塞的意思嗎??
謝謝




TO 版大
哈哈 沒有鬼打牆拉
有造您說的改過了
我有回覆說改完還是一樣(你就沒理我了T.T
才把他先復原回來
最後也是得到很多分享資料 不過改不出自己想要的
想說是自己不懂 還需多看 就先結了
謝謝

本篇文章回覆於2016-02-26 15:18
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
不錯的參考

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
我那邊只是提點一下處理的方式。

這樣說好了。如果你用你目前的方式。是一定有bug的。
因為我有說要用json接值。就得要發送json格式的值。這一點是不變的。

當然,因為要發生問題的情況是指當撈不到資料或是索引key為0才會發生問題。其它情況就不會發生。

我那篇php給你的方式的確有點小錯誤。本來要說的。看你結案,我當成你知道問題點了。所以就沒說明。

程式很多東西都是一種觀念。山不轉路轉。
給你一個提示。如果說兩個表不知道如何取值的情況下。有沒有去思考過將其變為一個表呢??
也就是改變資料表的結構的方式。

如果你腦袋打結的話,有時候換個方式也是一種解決。

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

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