大家好,小弟不才要請教各位前輩一個問題,這問題在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>
<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>
<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>
<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>
<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大神查兩天了.還是無法解決,謝謝先. |