Ajax Error

用登入頁面做範例


login.jsp

<html>

<head></head>

<script src="jquery-3.3.1.js"></script>

<?php include("test_score.php");?>

 <body>

   <table id="example">
   	<tr>
   		<td>學號</td>
   		<td>姓名</td>
   		<td>成績</td>
        </tr>
        <?php foreach($row as $key => $value){?>
        <tr>
        <td class="ts_no"><?=$value['ts_no']?></td>
        <td><input type="text" name="ts_name[]" value="<?=$value['ts_name']?>"/></td>
		<td><input type="text" name="ts_grade[]" value="<?=$value['ts_grade']?>" size="3"/></td>
   </tr>
   	<?php }?>

   </table>

   <input type="button" name="ts_update" value="更新" onclick="update()"/>

 </body>

 <script language="JavaScript">
	
	function update(){
	var ts_no="",ts_name="",ts_grade="";
	$('#example .ts_no').each(function(i) {
		ts_no = ts_no + $(this).text() + ",";
	});

	$("input[name='ts_name[]']").each(function(i) {
		ts_name = ts_name + $(this).val() + ",";
	});

	$("input[name='ts_grade[]']").each(function(i) {
		ts_grade = ts_grade + $(this).val() + ",";
	});

	ts_no = ts_no.substring(0, ts_no.length-1);
	ts_name = ts_name.substring(0, ts_name.length-1);
	ts_grade = ts_grade.substring(0, ts_grade.length-1);
	
	var data = {
		'isStatus':'update',
		'ts_no': ts_no,
		'ts_name': ts_name,
		'ts_grade': ts_grade,
	};

​     $.ajax({

​       url: "test_score.php",

​       type: "POST",

​       async: true,

​       dataType: "json",

​       data: data,

​       success: function(msg){

​         if(msg.success==true){

​           alert("修改成功!")

​         }

​       },

​       error:function(xhr, status, error){

​         alert(xhr.responseText);

​       }

​     });

   }

 </script>

</html>
mysql.php

<?php

   //建立mysql連線

   $servername = "localhost";

   $username = "root";

   $password = "1234";

   $dbname= "plan";

 try {

​       $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password,

​       array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

​       $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

   }catch(PDOException $e){

​       echo $e->getMessage();

   }

?>

test_score.php

<?php

   include("mysql.php");

   $ts_no="";$ts_name="";$ts_grade="";$success=false;

   if(isset($_POST['isStatus']) && $_POST['isStatus']=='update'){

​       $ts_no =  $_POST['ts_no'];

​       $ts_no = explode(",", $ts_no);

​       $ts_name =  $_POST['ts_name'];

​       $ts_name = explode(",", $ts_name);

​       $ts_grade =  $_POST['ts_grade'];

​       $ts_grade = explode(",", $ts_grade);

​       if(count($ts_no)>0){

​           for($i=0 ; $i<count($ts_no) ; $i++) {

​               $no = $ts_no[$i];

​               $name = $ts_name[$i];

​               $grade = $ts_grade[$i];

​               $sql = "UPDATE test_score SET ts_name = '$name' AND ts_grade = $grade WHERE ts_no = '$ts_no'";

​               $conn->exec($sql);

​               $success = true;

​           }

​       }

​       if($success==true){

​           $array = array('success' => true);

​           echo json_encode($array);

​       }

   }else{

​       $sql = "SELECT * FROM test_score";

​       $query = $conn->query($sql);

​       $row = $query->fetchAll(PDO::FETCH_ASSOC);

   }

?>

以上面SQL錯誤回傳說明

1.xhr:XMLHttpRequest物件

  • status:回傳HTTP response.status代碼
  • statusText:回傳HTTP response.status代碼訊息
  • readyState:XMLHttpRequest.readyState目前客戶端的狀態
  • responseText:回傳XMLHttpRequest內容
  • responseXML:回傳XMLHttpRequest內容XML格式

例如:SQL語法錯誤,因為WHERE ts_no = ‘$ts_no’ 這句,$ts_no是陣列資料型態導致拋錯

status:回傳代碼為200

statusText:對應代碼訊息為OK,代表有傳到後端

readyState:4,代表客戶端已完成。

responseText:後段程式碼錯誤訊息。

responseXML:後段程式碼錯誤訊息用標籤方式呈現。

<br /><font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'>↵<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'></span>Notice: Array to string conversion in C:\xampp\htdocs\active_plan\testfile\test_score.php on line <i>21</i>..

用正規畫檢化這段錯誤訊息(ajax responsetext error)

這種情況需要檢查後端回傳JSON物件內容

2.status:string

回傳服務器訊息timeout逾時、error錯誤、abort中止、parseerror分析錯誤、null(回傳訊息錯誤產生會null)

timeout:在ajax裡有設定timeout多少秒,限定多少秒之內回傳JSON物件,超過就顯示訊息。

error:代表ajax在後端發生錯誤。

abort:在定義ajax物件之前有先定義response.abort() funcrion,當發生錯誤時會請求中止未結束的ajax。

定義變數ajax function 傳後端未回傳時,若上一次的ajax請求未完成會中止目前的傳後端的動作

parseerror:將參數回傳後端做運算時解析錯誤,如上面程式碼在後段SQL錯誤無法解析;回傳後端運作時哪個資料型態變數錯誤

null:回傳資料為null,所以顯示null

3.error:string

回傳HTTP的代碼訊息,例如:404Not Found(錯誤的請求)、505Internal Server Error(內部服務器錯誤)、500、504、403..

400 Bad Request(請求無效)

例如:程式語法錯誤、參數資料型態有問題

404 Not Found(錯誤的請求)

例如:url後端檔案寫錯或表單內容寫錯

403 Forbidden(沒有權限,被禁止的)

例如:使用的IP沒有允許權限或者沒有連線到內部網路

500 Internal Server Error(內部服務器錯誤)

例如:請求server回傳資料找不到或網站升級和網站遷移

503 Service unavailable(後端錯誤請求)

例如:在後端執行時錯誤,回傳沒資料

504 Gateway Timeout(網頁請求超時)

例如:程式執行時間過長逾時或者太多人使用同一個資料庫排隊到逾時

補上資料來源:網址