關於iframe和div窗口中ajax請求200狀態時執行的回調問題
上一篇說了在ajax回調裏面處理iframe窗口的刷新問題,這一篇記錄一下遇到的一個分別在iframe和div窗口中ajax請求200狀態時執行的回調問題。
我們先來看一下ajax請求的寫法(這裏使用了jQuery)
function check_pass(uid) { $.ajax({ type: "GET", url: siteurl, dataType: "json", data:{ "c":"api", "m":"checkpass","uid":uid }, success: function(data) { console.log("這裏是success回調"); console.log(data); }, error:function (XMLHttpRequest, textStatus, errorThrown) { console.log("這是error回調"); // 狀態碼 console.log(XMLHttpRequest.status);// 錯誤信息 console.log(errorThrown); } }); }
在我們大多數人看來,ajax請求返回"200 ok" 狀態碼,此時表示請求成功,執行success方法,那我們就做個試驗:
首先我們註意看,這個ajax請求規定dataType為json,那麽我們在接口裏返回不同類型的數據來測試iframe和div的返回結果;
1.接口返回json數據
public function checkpass() { $uid = $this->input->get(‘uid‘); $data = array(‘checkcode‘ => 1, ‘reason‘ =>null ); $this->db->where(‘uid‘, $uid); $this->db->update(‘mt_member_data‘, $data); $msg = array(‘msg‘=>‘審核通過‘,‘code‘=>‘1‘); echo json_encode($msg); exit; }
在iframe窗口執行ajax請求控制臺打印(Network顯示狀態200ok):
這是success回調 {msg: "審核通過", code: "1"}
在模態窗口div執行ajax請求控制臺打印(Network顯示狀態200ok):
這是success回調 {msg: "審核通過", code: "1"}
結論:當接口返回數據類型為json時(符合ajax設定),iframe和div中的ajax都會走success回調。
2.接口返回null
public function checkpass() { $uid = $this->input->get(‘uid‘); $data = array(‘checkcode‘ => 1, ‘reason‘ =>null ); $this->db->where(‘uid‘, $uid); $this->db->update(‘mt_member_data‘, $data); }
在iframe窗口執行ajax請求控制臺打印(Network顯示狀態200ok):
這是error回調 200 SyntaxError: Unexpected end of JSON input at JSON.parse (<anonymous>) at m.parseJSON (jquery.min.js:5) at Pb (jquery.min.js:5) at x (jquery.min.js:5) at XMLHttpRequest.b (jquery.min.js:5)
在模態窗口div執行ajax請求控制臺打印(Network顯示狀態200ok):
這是success回調 null
結論:當接口返回數據類型為null時(不符合ajax設定),iframe中的ajax走error回調,模態窗口div中的ajax卻是走success回調。
3.接口返回非json數據
public function checkpass() { $uid = $this->input->get(‘uid‘); $data = array(‘checkcode‘ => 1, ‘reason‘ =>null ); $this->db->where(‘uid‘, $uid); $this->db->update(‘mt_member_data‘, $data); echo "非json數據"; exit; }
在iframe窗口執行ajax請求控制臺打印(Network顯示狀態200ok):
這是error回調 200 SyntaxError: Unexpected token 非 in JSON at position 0 at JSON.parse (<anonymous>) at m.parseJSON (jquery.min.js:5) at Pb (jquery.min.js:5) at x (jquery.min.js:5) at XMLHttpRequest.b (jquery.min.js:5)
在模態窗口div執行ajax請求控制臺打印(Network顯示狀態200ok):
這是error回調 200 SyntaxError: Unexpected token 非 in JSON at position 0 at JSON.parse (<anonymous>) at parseJSON (VM1506 jquery.min.js:2) at On (VM1506 jquery.min.js:2) at T (VM1506 jquery.min.js:2) at XMLHttpRequest.r (VM1506 jquery.min.js:2)
結論:當接口返回數據類型為非json數據時(不符合ajax設定),iframe和模態窗口div中的ajax都是走error回調,並且報數據格式不對的錯誤。
所以,我們可以看出,當接口不返回數據(即為null)時,對於iframe和div中發起的ajax請求,請求成功後執行的回調函數是不同的,這點值得註意。
關於iframe和div窗口中ajax請求200狀態時執行的回調問題