iT邦幫忙

0

javascript有接收到json但回應undefined

我在console.log裡可以看到json,但是用javascript印出來的表格卻全部都是undefined....

json.php(輸出json)

<?php
 include "lora_config.php";  //引入公用程式 , MySql 及 ip

$result = mysqli_query($con, "SELECT * FROM `lora_log` WHERE 1 ORDER BY id DESC "); 

if ($result) {
// Conversion of result object into JSON format
$rows = array();
while($temp = mysqli_fetch_assoc($result)) {
echo json_encode($temp);
}

} else {
    echo "No Results Found";
}
    // 關閉資料庫
    mysqli_close($con);

?>

html

<div class="container">
   <table id="Table" border="1" >
      <thead>
        <tr>
          <th>ID</th>
          <th>gp</th>
          <th>sn</th>
        </tr>
      </thead>
      <tbody></tbody>
   </table>
</div>

javascript

<script>
$(document).ready(function() { 
 		$.ajax({
				url: 'lora_json.php',
				method: 'GET',
				success: function(response){
            var len = response.length;
            for(var i=0; i<len; i++){
                var id = response[i].id;  
				var gp = response[i].gp;
				var sn = response[i].sn;


                    var tr_str = "<tr>" +
                    "<td>" + id + "</td>" +
					"<td>" + gp + "</td>" +
					"<td>" + sn + "</td>" +
                    "</tr>";

                $("#Table tbody").append(tr_str);
            }

        }
	});
    }); 
</script>
看更多先前的討論...收起先前的討論...
dragonH iT邦超人 5 級 ‧ 2020-02-07 10:25:30 檢舉
你資料長怎樣?
amisser iT邦新手 5 級 ‧ 2020-02-07 10:38:50 檢舉
https://imgur.com/2gdx3JU
https://imgur.com/murKMEz
https://imgur.com/n3mIEx5

抱歉,因為第一次問這種問題,用這樣的圖片方式不知道方不方便閱讀?
因為我不知道問題可能出在哪邊
dragonH iT邦超人 5 級 ‧ 2020-02-07 10:41:15 檢舉
你的 response 看起來不是 array 阿

你 console.log(response) 看長怎樣
xSummer iT邦新手 4 級 ‧ 2020-02-07 10:55:31 檢舉
你PHP有定義$rows = array(); 卻沒使用它有點可惜
while ($temp = mysqli_fetch_assoc($result))
{
$rows[] = $temp; //你原先應該是要這樣做吧
}
amisser iT邦新手 5 級 ‧ 2020-02-07 11:11:10 檢舉
https://imgur.com/2gdx3JU
我想我大概知道問題出在哪了...就是我console.log出來的東西根本不是json....
froce iT邦大師 1 級 ‧ 2020-02-07 15:18:11 檢舉
少個JSON.parse()吧...
console.log(typeof response)就知道了。

2 個回答

3
浩瀚星空
iT邦超人 1 級 ‧ 2020-02-07 10:44:38
最佳解答

你犯了數個錯誤。可能需要一起進行才可以。
我就一一的說明

ajax的取值方式不對:

ajax如果未宣告dataType的情況下。會用檔案mime格式來決定回傳資料。一般來說你請的是網址。所以回傳的大多是html或是text這兩種格式。反正不會是jsonp格式。
當然了,就算不宣告json格式其實也沒關係。可以在接受字串後,再從javascript內轉換成json也是可以的。
但最好是宣告一下要接收的資料格式。因為我看你就直接用物件用法了。也沒做任何轉換json的動作

ajax能接受的是一個json。不是數個json

在你的程式內這樣子使用的話

while($temp = mysqli_fetch_assoc($result)) {
    echo json_encode($temp);
}

只會產生數個json組。但ajax能應用接收的只有一組。
正確的用法是你可以先用一個陣列(array)組合後。再最後才去做 json_encode 輸出。

看更多先前的回應...收起先前的回應...
amisser iT邦新手 5 級 ‧ 2020-02-10 16:23:54 檢舉

感謝ㄉㄉ
我現在還有一個問題,我需要讓這個表格每幾秒不重整網頁自動更新一次。
上網估狗了一下,我是這樣去寫的,但是它還是不會動....

$(document).ready(function() { 
 		$.ajax({
				url: 'lora_json.php',
				method: 'GET',
				dataType:'json',
				success: function(response){

            var len = response.length;
            for(var i=0; i<len; i++){
                var id = response[i].id;  
				var gp = response[i].gp;
				var sn = response[i].sn;
				var data_01 = response[i].data_01;


                    var tr_str = "<tr>" +
                    "<td>" + id + "</td>" +
					"<td>" + gp + "</td>" +
					"<td>" + sn + "</td>" +
					"<td>" + data_01 + "</td>" +
                    "</tr>";

                setInterval($("#Table tbody").append(tr_str),1000);
            }

        }
	});
    }); 

個人是想用setInterval()去處理,不知道這個方向對不對?

好可怕的寫法
居然敢將setInterval放在for內呼叫。

你想操死誰的機器。

說真的,你真知道 setInterval 的用法嘛?

amisser iT邦新手 5 級 ‧ 2020-02-10 16:39:42 檢舉

我是真的不知道(誠心)
不過您一提醒我倒是想起來這樣會陷入無限循環了.....
可不可以大概給我幾個關鍵字,我可以自己試著去估狗看看

setinterval 是固定計時器。
也就是當你運行就會建立一個計時器。你後面設定了1000。就是每一秒就運行一次。
你又放在for。然後1+1+2+4+8+16....。很可怕吧!!

1
kekeke
iT邦新手 5 級 ‧ 2020-02-07 10:57:51

第一次回復 如果有錯誤 請鞭小力點 就我所知 ajax如果沒有給dataType:json 返回的格式應該只是單純的text 不是你所想的json格式~~如果有誤 請各位多多指教

amisser iT邦新手 5 級 ‧ 2020-02-10 16:20:37 檢舉

感謝回覆,已經可以了喔~

我要發表回答

立即登入回答