2017-04-12 71 views
0

我是一名初學者程序員/編碼員,我開始做本地天氣應用程序的事情。試圖從API獲取一段數據時,我遇到了這些錯誤(首先嚐試使用.getJSON()):API,CORS,MIME,XMLHttpRequest無法加載,問題

1.「CORS策略阻止訪問'...'處的字體」。

2.「引導工具提示需要Tether。」

3「.XMLHttpRequest無法加載'...'沒有'Access-Control-Allow-Origin'標頭出現在請求的資源上。」

然後我試圖解決方法:使用阿賈克斯()與JSONP,但後來我被擊中這些錯誤:

1「在‘...’已經被封鎖CORS政策進入字體」 。

2.由於其MIME類型('application/json')不可執行且啓用嚴格的MIME類型檢查,因此要從'...'執行腳本。

現在我不知道該怎麼做。另外,我想知道,爲什麼第一個示例中出現Tether錯誤,因爲一個小時前我沒有收到這個錯誤,而我仍然沒有在第二個示例中找到它(使用jsonp)。

.getJSON()代碼:http://codepen.io/Kestvir/pen/Mmgzjz

.ajax()代碼:http://codepen.io/Kestvir/pen/oWvMBb

+0

如果API不支持CORS或JSONP ....你必須使用代理服務器或第三方服務上。不是所有的api都可以使用ajax訪問 – charlietfl

回答

0

加入您的通話AJAX必要標題。

有根據你所需要的多種解決方案...

如果你想自定義頁眉(或套頭)添加到一個單獨的請求然後只需添加headers屬性:

// Request with custom header 
$.ajax({ 
    url: 'foo/bar', 
    headers: { 'x-my-custom-header': 'some value' } 
}); 

如果你想一個缺省的頭部(或套頭)添加到每個請求然後使用$.ajaxSetup()

$.ajaxSetup({ 
    headers: { 'x-my-custom-header': 'some value' } 
}); 

// Sends your custom header 
$.ajax({ url: 'foo/bar' }); 

// Overwrites the default header with a new header 
$.ajax({ url: 'foo/bar', headers: { 'x-some-other-header': 'some value' } }); 

如果你想頭(或套頭)添加到每個請求然後使用beforeSend鉤與$.ajaxSetup()

$.ajaxSetup({ 
    beforeSend: function(xhr) { 
     xhr.setRequestHeader('x-my-custom-header', 'some value'); 
    } 
}); 

// Sends your custom header 
$.ajax({ url: 'foo/bar' }); 

// Sends both custom headers 
$.ajax({ url: 'foo/bar', headers: { 'x-some-other-header': 'some value' } }); 

編輯(詳細信息):有一點要注意與ajaxSetup一樣,您只能定義一組默認標題,並且只能定義一個beforeSend。如果多次撥打ajaxSetup,則只會發送最後一組標題,並且只執行最後一次發送前回撥。

參考:How can I add a custom HTTP header to ajax request with js or jQuery?

+0

'Access-Control-Allow-Origin'頭部必須設置在另一端....沒有好的設置它的客戶端 – charlietfl

+0

我建議你看看openweathermap.org的文檔如何調用他們的API –

相關問題