iT邦幫忙

2

Jquery Ajax回傳沒反應

各位大大好
小弟這問題卡了很久
我用Jquery做了一個ajax傳遞
後端是用資料庫去查找資料
查到之後再回傳
#winner 是個dropdownlist
以下是這段Jquery

$(document).ready(function(){
			$('body').on('change','#winner',function(){
				var id = $('#winner').val();
				$.ajax({
					method:'GET',
					url:'ajax_vip.php',
					data: {
						'id':id
					},
					dataType: 'json',
					success:function(response){
						$.each(response,function(index,element){
							$('#address').text(element.address),
							$('#phone').text(element.phone),
							$('#mobile').text(element.mobile),
							$('#com_mail').text(element.com_mail),
							$('#per_mail').text(element.per_mail);
						});
					},
					error:function(xhr){
						console.log("發生錯誤: " + xhr.status + " " + xhr.statusText + " 錯誤訊息:" +xhr.text);
					}
				});
			});
	});

附上後端

if($id <> "")
{
	//地址和家電
	$q = "select add,ph from em where no = '$id'";
	$r = mysql_query($q,$link) or die("資料庫連結失敗");
	list($address,$phone) = mysql_fetch_array($r);
	
	//公司email,個人email,手機
	$q1 = "select firstemail,secondemail,mobile from exam.empdutytbl where no = '$id'";
	$r1 = mysql_query($q1,$link)or die("$q1");
	list($com_mail,$per_mail,$mobile) = mysql_fetch_array($r1);
	
	$address = urlencode($address);
	
	$data_array = array(
	'address' => $address, 
	'phone' => $phone, 
	'com_mail' => $com_mail, 
	'per_mail' => $per_mail, 
	'mobile' => $mobile);
	$data_array_url = json_encode($data_array);
	$data_json = urldecode($data_array_url);
	echo $data_json;

	
}

我用firebug去檢測
發現他的確有傳回json格式的資料
但是卻沒有出現在欄位中
感謝各位大大

2 個回答

4
dragonH
iT邦大師 1 級 ‧ 2019-12-13 14:06:17
最佳解答

看一下你的 browser console

network 那頁

看後端回傳的是什麼

或者在你的js加上

console.log(response)

看拿到的是什麼

看更多先前的回應...收起先前的回應...
st474ddr iT邦新手 5 級 ‧ 2019-12-13 14:10:26 檢舉

兩個我都試了
皆沒有任何訊息出現@@~

dragonH iT邦大師 1 級 ‧ 2019-12-13 14:15:08 檢舉

st474ddr

network 沒出現的話

代表你根本沒有 send http request

可能需要看是什麼問題

或許可以先從有沒有觸發 change event 著手

沒有任何訊息

他是有回傳空值還是都沒回傳

st474ddr iT邦新手 5 級 ‧ 2019-12-13 14:17:53 檢舉

都沒回傳
一片空白

st474ddr iT邦新手 5 級 ‧ 2019-12-13 14:19:40 檢舉

dragonH
可是我在sources下斷點的時候
onchange是會停的
這不就代表有觸發嗎?

dragonH iT邦大師 1 級 ‧ 2019-12-13 14:22:54 檢舉

st474ddr

可能要先釐清一下

network 沒有任何訊息

是指沒有 send http request

還是有 send http request

但是後端沒有回傳任何 data

後者的話

問題可能在後端

可是我在console下斷點的時候
onchange是會停的
這不就代表有觸發嗎?

最簡單的

在你 change 的那個 function

隨便加個 console.log('hello ithelp')

就知道了

st474ddr iT邦新手 5 級 ‧ 2019-12-13 14:24:45 檢舉

還有幾個線索附上
第一個
我在sources下斷點的時候
看 $('body').on('change','#winner',function() 這行
他會顯示 Unexpected end of input
可是我檢查過括號 都對齊了才對

還有一個
就是我ajax裡面的每一個屬性
他都回傳
success is not defined(以success為例)這種錯誤給我

dragonH iT邦大師 1 級 ‧ 2019-12-13 14:25:47 檢舉

話說

你應該有 import juqery 吧

或許有錯誤截圖會比較清楚

st474ddr iT邦新手 5 級 ‧ 2019-12-13 14:30:34 檢舉

是指沒有 send http request
還是有 send http request

我有用輔助工具Firebug測試
確實是有回傳json資料的
只是google的network中沒有顯示我就不明白了

在你 change 的那個 function
隨便加個 console.log('hello ithelp')

console.log不會顯示
但alert會

st474ddr iT邦新手 5 級 ‧ 2019-12-13 14:38:02 檢舉

你應該有 import juqery 吧

這有的 ajax是偵測的到定義的

https://imgur.com/gallery/dSBPlAi
問題圖片連結附上

dragonH iT邦大師 1 級 ‧ 2019-12-13 14:41:58 檢舉

另外

$.each(response,function(index,element){
							$('#address').text(element.address),
							$('#phone').text(element.phone),
							$('#mobile').text(element.mobile),
							$('#com_mail').text(element.com_mail),
							$('#per_mail').text(element.per_mail)
						});

我沒有細看

不過這裡應該是要 ; 結尾

st474ddr iT邦新手 5 級 ‧ 2019-12-13 14:44:42 檢舉

不過這裡應該是要 ; 結尾

那個我後來有補上 sorry這邊問題忘了補
但目前還是顯示不出來
response抓的到
反而是element not defined

dragonH iT邦大師 1 級 ‧ 2019-12-13 14:46:49 檢舉

我指的是這樣

$.each(response,function(index,element){
							$('#address').text(element.address);
							$('#phone').text(element.phone);
							$('#mobile').text(element.mobile);
							$('#com_mail').text(element.com_mail);
							$('#per_mail').text(element.per_mail);
						});

json 格式的話是物件不是陣列吧 each 是用在陣列
可以直接 response.address 試試看

dragonH iT邦大師 1 級 ‧ 2019-12-13 14:52:28 檢舉

json 格式的話是物件不是陣列吧 each 是用在陣列

可是他的 error message 都不是有關這個

就很奇怪XD

st474ddr iT邦新手 5 級 ‧ 2019-12-13 14:52:28 檢舉

我指的是這樣

喔喔原來如此XDD~
雖然還是跑不出來QQ
但是我有用listennn08大大的方法解決了

感謝兩位大大的幫助
只是很好奇網路上有很多用each在處理json的回傳資料
他們怎麼可以跑的

dragonH iT邦大師 1 級 ‧ 2019-12-13 14:54:21 檢舉

只是很好奇網路上有很多用each在處理json的回傳資料

他們的資料應該是長這樣

[
    {
        key: 'xxx',
        value: 'xxx'
    },
    {
        key: 'xxx',
        value: 'xxx'
    },
]

最外層是個 array

st474ddr iT邦新手 5 級 ‧ 2019-12-13 14:57:00 檢舉

最外層是個 array

真的==
抱歉我這沒注意到 謝謝兩位大大的賜教

只是很好奇網路上有很多用each在處理json的回傳資料

這個你可以去看一下 json 格式的說明
如果你的 json 長這樣

[
    {"address":...}
	{"phone": ...}
	{"mobile": ...}
	{"com_mail": ...}
    {"per_mail": ...}
]

對 js 來說就是陣列
dragonH js 常常跳出很奇怪的錯誤啊XD

dragonH iT邦大師 1 級 ‧ 2019-12-13 14:58:40 檢舉

/images/emoticon/emoticon37.gif

0
ckp6250
iT邦新手 2 級 ‧ 2019-12-13 15:32:42

後端的第一行

if($id <> "")

是否應該是

if($_GET['id'] <> "")

才對啊?

又,如果id不應空白,是否在前端就該攔下來,
不該到後端再去判斷?浪費社會資源?

st474ddr iT邦新手 5 級 ‧ 2019-12-16 09:28:23 檢舉

大大好 感謝您提出的疑問

第一個問題
$GET接收我有處理過了 只是這邊沒有貼出來
抱歉造成大大的疑惑

又,如果id不應空白,是否在前端就該攔下來,
不該到後端再去判斷?浪費社會資源?

因為那隻是一個通用的function程式
有其他很多不同功能
所以我用部分條件不等於空值來分開
不然其他程式要跑的時候 他也會跑這段

ckp6250 iT邦新手 2 級 ‧ 2019-12-16 11:50:06 檢舉

理解!

我要發表回答

立即登入回答