跳到主要內容

JQuery AJAX 無法接收後端回傳值的解決...

筆者以撰寫PHP為主
慣用CodeIgniter Framework ,或單純採用Smarty 樣板引擎開發網站

筆者在網頁上,如果要使用到AJAX,首選是jQuery
若有接觸過或經常使用jQuery 的程式設計師, 應該都知道jQuery 是以UTF-8為主

筆者曾經遇過的案例是在公司內部的測試機以及本機電腦跑
各瀏覽器下瀏覽與操作,都沒有問題

移轉到客戶的測試環境下,也如預期能正常運作
但移轉到客戶的正式環境下,在IE各版本底下,$.ajax 的所有回傳全部都是 undefined
一度以為jQuery 有問題
再透過jQuery 1.4.1 (目前最新版本) 回傳的訊息比較詳細,是 c00ce56e 的錯誤訊息
經過Google大神的指導之下,原來這個訊息是「不支援指定的編碼」

再更進一步查詢才知道,原來IE不論什麼版本,頁面編碼與後端回傳的編碼必須是相同的
而c00ce56e錯誤是指頁面的編碼與後端回傳編碼不符導致

筆者覺得奇怪,前台, 後端程式都是 php 撰寫,並且header是utf-8沒有錯
甚至以為是CodeIgniter Framework作怪, 但只有客戶的正式環境會有問題

檢查了PHP的設定, 該設定的都設了,仍然是有問題
後來腦袋靈光一閃,會不會是Apache 的預設編碼與前台的編碼不同

最後的嘗試,index.php 的最開頭加上 ini_set("default_charset","utf-8");
結果,差點沒落淚,整個就是正常沒問題了

最終的分析結果,應是APACHE的預設編碼,讓回傳的json的header是不同編碼,而導致IE底下出現如此的錯誤

所以最好的方法就是,直接在程式中加入預設編碼為UTF-8的設定,這樣應該不會再遇到什麼怪問題了

留言

這個網誌中的熱門文章

Arduino 四軸飛行器開發實作,無人機硬體、無線遙控器、飛控軟體整合、飛行教學,一天學會

    您好: 2018/2/3(六)舉辦的「 Arduino 四軸飛行器實作坊 」,使用Arduino模組進行教學,非常容易學習,從無人機硬體、飛航控制到搖桿操控飛行,一天學會。 講師邀請到翔探科技團隊,自有技術研發的飛行器、原始程式碼、電路設計都是為了讓初學者能夠踏入四軸飛行器領域,套件亦適合進階應用開發。 ...

Because we like you

...

【課程】LinkIt 7697物聯網應用實作,串接MCS雲服務、全新開發工具好上手、自製APP與硬體互動

    您好: 8/19(六)舉辦的「 LinkIt 7697物聯網應用實作 」 課程採用聯發科技最新推出的 LinkIt 7697 開發板,適合想學習物聯網應用開發的人來參加。 教學團隊CAVEDU規畫4個主題搭配LinkIt 7697進行教學,以感測器收集環境資料,透過連接MCS雲服務並上傳資料,並且學習自製Android APP與開發板互動。 歡迎來上課練功、技術交流、吹冷氣、交朋友。也請您把課程資訊提供給需要的同學、同事或朋友。 ...