[問題] Safari上使用XMLHttpRequest的問題

作者: bluedragon (藍閣龍宿)   2014-03-10 19:36:57
小弟是新手 最近遇到一個問題
望版上各位高手不吝賜教
code如下:
function detectBrowser(){
var sAgent = navigator.userAgent.toLowerCase();
this.isIE = (sAgent.indexOf("msie")!=-1); //IE6.0-7
this.isFF = (sAgent.indexOf("firefox")!=-1);//firefox
this.isSa = (sAgent.indexOf("safari")!=-1);//safari
this.isOp = (sAgent.indexOf("opera")!=-1);//opera
this.isNN = (sAgent.indexOf("netscape")!=-1);//netscape
this.isCh = (sAgent.indexOf("chrome")!=-1);//chrome
this.isMa = this.isIE;//marthon
this.isOther = (!this.isIE && !this.isFF && !this.isSa
&& !this.isOp && !this.isNN && !this.isSa);//unknown Browser}
function handleStateChange(){
if (objXMLHTTP.readyState == 4) {
if (objXMLHTTP.status == 200) {
var ret = objXMLHTTP.statusText;
if (ret != ""){
var info = ret.split('|');
code = parseInt(info[0], 10);
city = String(info[1]);
temp = parseInt(info[2], 10);
unit = String(info[3]);
showWeather();
}
} else{
if(time <= 10){
setTimeout("checkWeather();", time*1000); time += 5; }
else{
code = null;
showWeather();
}
}
}
}
function checkWeather(){
var oBrowser = new detectBrowser();
if (window.XMLHttpRequest) {
objXMLHTTP=new XMLHttpRequest(); }// code for IE
else if (window.ActiveXObject) {
objXMLHTTP=new ActiveXObject("Microsoft.XMLHTTP");
}
objXMLHTTP.open("GET","<%=controller%>/?checkWeather=1",true);
if (oBrowser.isCh && oBrowser.isSa) { /*let Chrome refresh page */
objXMLHTTP.setRequestHeader("If-Modified-Since",(new Date(0)).toISOString()); }else{ /*let IE refresh page */
objXMLHTTP.setRequestHeader("If-Modified-Since",new Date(0));
}
objXMLHTTP.onreadystatechange = handleStateChange;
objXMLHTTP.send(null);
}
這段code的目的是透過XMLHttpRequest物件 取得有關城市 天氣溫度等資訊
透過WireShark抓的封包 理論上都會收到下列封包
HTTP/1.1 200 28|Taipei|16|c
在handleStateChange()中 objXMLHTTP.statusText便可取得"28|Taipei|16|c"
之後再根據這個去parse
run在IE FireFox Chrome都可以正常的get到資訊
但是run在Safari上面很奇怪 不管試幾次
objXMLHTTP.statusText所得到的一直是"OK"
WireShark抓到的封包明明就是"HTTP/1.1 200 28|Taipei|16|c"
而不是"HTTP/1.1 200 OK"
想請教各位高手 是小弟code有甚麼地方寫錯了
還是Safari上get到的statusText會always是"OK"?
還請高手指點 感激不盡!!
作者: danny8376 (釣到一隻猴子@_@)   2014-03-11 08:16:00
為何要塞在status text呢...一般常態認知中 status text跟status code幾乎是綁在一起的 如果瀏覽器不去parse 直接丟掉你也不能說些甚麼畢竟那邊本來就不是讓你塞結果用的
作者: UniFish (貢貢老盃)   2014-03-11 10:42:00
為何要塞在status text呢? +1

Links booklink

Contact Us: admin [ a t ] ucptt.com