1、前段時間學習headfirst AJAX,發現有些概念比較陌生,理解起來比較困難,等看完了半本的JavaScript高級程序設計,再回頭看這本AJAX,發現輕松了很多,但是遇到了一個問題,AJAX請求php后,返回的竟然是整個php代碼,按書上的說法,應該是返回echo的內容才是啊,雖然之前學習第一章的時候,也遇到了這個問題,當時並沒有在意,以為是書的內容畢竟不太新了,可能是哪里出了問題,但是第二張再次遇到這個問題,應該不是書的問題了。該想想自己哪里出了問題。
2、經過從網上查找類似問題的解答,發現一個“服務器環境”這個詞,最終我的理解是,我的這個不是服務器環境,看不懂php的代碼,所以需要在本地配置服務器環境。
3、如何配置?又查到一個詞:PHPNOW,是一個php環境套件。OK,開始下載安裝,安裝的時候出現一個問題,安裝服務[apache_pn]失敗,給出的可能原因里有一條非管理員權限,猜測是這個問題,那么我右鍵管理員權限打開呢——直接閃退……
4、求助於網絡,發現要從命令提示符(管理員)進入安裝目錄后打開安裝程序,這個順利順利解決。但是,怎么使用呢?
5、安裝完成后自動蹦出了localhost頁面,IP是127.0.0.1,難道我這就是我的網絡地址?嘗試用127.0.0.1訪問,發現可以進入這個界面,也就是說,如果我把php文件放在這個頁面的根目錄下,然后就可以正常請求了?嘗試一下。
6、在js里修改請求路徑:var url="http://127.0.0.1/checkName.php?username=" + username;打開本地的html,然后alert了一下請求的status,發現一直是0,正常來說不應該是200嘛!哪里出了問題?
7、打開火狐的調試,查看網絡,發現狀態是200 OK,
但是為什么alert顯示狀態是0呢,又看了一下控制台,恍然大悟——
由於我是在本地請求的一個地址,所以屬於跨源請求,被攔了,既然知道怎么回事了,解決也就容易了。
8、不過可能當時沒吃飯,腦子轉的有點慢,沒有想到把本地的html都放在服務器目錄下,從127.0.0.1進去訪問,js里的請求路徑也可以使用相對路徑了,也就是說什么都不用改,把所有文件放在服務器目錄下,用瀏覽器訪問,問題就可以解決了。
9、不過我當時的做法——從本地html請求,但是把服務器里的php文件加了——
header("Access-Control-Allow-Origin: *"); header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
——允許跨源請求,當然結果也是OK的。
10、各種方法來源於網上,吐槽一下headfirst AJAX這本書,配置服務器環境都不帶提一下的,花了3個多小時才搞定這點事。不能能搞明白怎么回事也是挺爽的,順便還省了一頓晚飯。
AJAX中本地使用XHR可參考http://www.cnblogs.com/zczhangcui/p/6358675.html