大家好,小弟不才要請教各位前輩一個問題,這問題在Google上查,好像很多人都有發生,而我依據網路上的作法去做,仍然無法順利取得資料,才斗膽上來發問. 
 
這是一個透過送經緯度回傳地理資訊的web service. 
一開始我是用以下的程式碼,在IE8上可順利取得.但用chrome就不行. <Script Language="JavaScript" type="text/javascript" src="jquery-1.2.6.js"></Script>
<script language="javascript" type="text/javascript"> 
function showMsg() {
        $.ajax({
              dataType: 'text',
              url: 'http://ngis.moea.gov.tw/ngisfxdata/webservice/XMLFunc_basic.aspx?cmd=basic&x=120.300249&y=22.612073&coor=84',
              type: 'get',
              success: function(oXml) {
                           $("#txt1").val(oXml);
                }
              })
            }
</script>chrome會有Origin http://localhost is not allowed by Access-Control-Allow-Origin.的錯誤,查了網路說是安全性問題,所以必須要用以下解法: 
1.加入以下header 
    Access-Control-Allow-Origin: * 
    Access-Control-Allow-Methods:GET,PUT,POST,DELETE 
2.在執行chrome時加入--disable-web-security 
 
但我在web.config裡加入以下也沒有用<httpProtocol>
            <customHeaders>
                <add name="Access-Control-Allow-Origin" value="*" />
                <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE" />
                <add name="Access-Control-Allow-Headers" value="Content-Type" />
            </customHeaders>
        </httpProtocol> 在$.Ajax裡加入以下也沒有用 <Script Language="JavaScript" type="text/javascript" src="jquery-1.10.2.js"></Script>
<script language="javascript" type="text/javascript"> 
function showMsg() {
        $.ajax({
             beforeSend: function(xhrObj){  //加入這些
            xhrObj.setRequestHeader("Access-Control-Allow-Origin","*");//加入這些
            xhrObj.setRequestHeader("Access-Control-Allow-Methods","GET,PUT,POST,DELETE");//加入這些
            },
            headers: { 'Access-Control-Allow-Origin': '*' }, //加入這些
              dataType: 'text',
              url: 'http://ngis.moea.gov.tw/ngisfxdata/webservice/XMLFunc_basic.aspx?cmd=basic&x=120.300249&y=22.612073&coor=84',
              type: 'get',
              success: function(oXml) {
                           $("#txt1").val(oXml);
                }
              })
            }
</script>在IIS裡的 預設的網站\HTTP標頭\自訂HTTP標頭 新增Access-Control-Allow-Origin: *, 也沒有用 
 
 
只有在執行chrome時加入--disable-web-security時就能成功取得傳回的資料,不會有not allowed by Access-Control-Allow-Origin.的錯誤 
但不可能寫一個網頁,要叫每個使用者都要用帶參數的方式執行chrome吧,而且我是要用手機連的,手機上的chrome,safari也不能這樣執行. 
所以就再找解決方法,後來有高手建議要把datatype改成JSONP 
 
所以,我就把程式改成以下. <Script Language="JavaScript" type="text/javascript" src="jquery-1.10.2.js"></Script>
<script language="javascript" type="text/javascript"> 
function showMsg() {
        $.ajax({
              dataType: 'jsonp',
              crossDomain: true,
              url: 'http://ngis.moea.gov.tw/ngisfxdata/webservice/XMLFunc_basic.aspx?cmd=basic&x=120.300249&y=22.612073&coor=84',
              type: 'get',
              success: function() {
                          alert("Success");
                }
              })
            }
</script>但得到的結果還是取不到,錯誤訊息是 
Resource interpreted as Script but transferred with MIME type text/xml: "http://ngis.moea.gov.tw/ngisfxdata/webservice/XMLFunc_basic.aspx?cmd=basic&…coor=84&callback=jQuery110203576156080234796_1383033330407&_=1383033330408".  
Uncaught SyntaxError: Unexpected token <  
 
但由chrome 檢查元素裡的Network去看Response是有回傳XML字串的.但就是有以上的錯誤,無法承接. 
所以只好厚著臉皮上來請教一下各位,我用Google大神查兩天了.還是無法解決,謝謝先. |