萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> PHP 中使用ajax時一些常見錯誤總結整理

PHP 中使用ajax時一些常見錯誤總結整理

本文介紹了PHP 中使用ajax時一些常見錯誤總結整理,非常實用,有興趣的同學可以看看

PHP作為後端時,前端js使用ajax技術進行相互信息傳送時,經常會出錯誤,對於新手來說有些手足無措。總結錯誤、經驗,以後隨時回顧。

第一個問題,當前端無錯誤的情況下,頁面調試也顯示沒有問題,但是ajax獲取不到後端php文件發送過來的信息:

前端代碼如下:

 

 代碼如下復制代碼

$.ajax({

  url:Ƈ.php',//目的php文件

  data:{"age":12,"name":'zh'},//傳送的數據

  type:‘post',//方式post/get

  dataType:'json',//數據傳送格式

  success:function(response)

  {

  console.log(response);

  },

  error:function(response)

  {

  console.log(response);

  console.log("錯誤");

  }

});

 

php後端代碼如下:

 

 代碼如下復制代碼

$postAge=$_POST['age'];

$postName=$_POST['name'];

echo$postAge;

echo$postName;

 

頁面出現後,F12調試查看如下所示:

狀態碼都沒問題,status是200,responseReady是4,說明在html發送給php文件信息過程是沒有問題的。而且php也返回了信息。可是為什麼程序走了error而沒有走success呢?

這時需要小心!由於php後端多個echo沒有把數據整理為json格式。也就是說php返回的是一個字符串不是json格式的數據。有人說加上json_encode()呢?這樣也是不行的,因為json_encode()的函數作用沒搞清,百度仔細看下。json_encode()與json_decode()是一對。

json_encode(json),把json整理為json格式的數據。在上例中,就算php後端代碼改寫為:echo   json_encode(postAge);和echojsonencode(postName);也是不對的。因為這樣僅僅是把單個postAge和postName整理為了json格式,但是由於是2個返回,既是2個response,在浏覽器調試頁面也可以看到1個post回來2個response。這樣導致2個json格式的數據返回給前端是就不再是json格式的數據(我理解為json污染,方便理解)。也就是單個數據是json格式但是多個json格式數據“胡亂”結合在一起不按照json格式合並在一起就會產生“污染”。導致整體數據格式混亂無法被識別,這種情況者數據處理和傳輸時隨時都見得到。

json_decode(json,true/false)函數是把json整理為數組或者object(理解為類)。true是強制裝換為(關聯)數組,false是默認的會轉換為object形式的數據。

回到本文提出的例子上。

既然傳送回來的數據不再是json格式的數據,那麼就是dataType的問題了。

dataType是告訴浏覽器檢查傳送的數據格式。如果不寫,浏覽器不會去檢查數據格式,寫了就一定檢查而且必須滿足格式要求。本例中,由於寫了為json格式,但是傳回來時不是json格式,所以浏覽器認為傳輸過程中出現了錯誤,所以走了error而沒有走success。

這時最好的方式是修改php代碼,將echo的內容改為一個數組,用數組的信形式把整體數據整理為json格式進行傳送(json_encode),避免發生錯誤。

當然也可以使用另一種方法,類似作弊的方法,直接注釋掉(或者不寫)dataType,這樣浏覽器就不會去檢查數據的形式而是根據數據的形式智能的判斷,類似蒙混過關。

 以下是dataType的W3school解釋:

這裡寫圖片描述

值得注意的是,後端php文件中多個echo輸出後,數據返回確是一起返回的,既是修改正確後,前端得到的數據是2個數據合為一個字符串的形式數據。本例子中得到的數據是12zh。

當然還有很多細節問題了,比如php後端只能用echo或者die(),不能用return,這是因為return是只在服務器端中返回數據使用,而echo是打印數據,將數據從服務器端打印出來,給前端。return只能在服務器端,或者前端單一的返回。而die()的強大就不提了,直接終止後端php程序的形式返回數據。

還有比如在$,ajax({});中每一行既是一個參數,參數之間是逗號隔開,多個數據是在{}內,隔開是用逗號等等。

copyright © 萬盛學電腦網 all rights reserved