2016-06-29 126 views
0

我想做一個CORS獲取請求,說谷歌(只是一個例子,我實際上訪問一個網站,返回JSON數據)。下面是我的Ajax代碼:CORS請求與Ajax/Javascript/Django

$.ajax({ 
    url: "https://www.google.com", 
    type: "get", 
    dataType: "json", 
    crossDomain: true, 
    success: function(data, textStatus) { 
     alert ("success" + data); 
    }, 
    error: function(data, textStatus) { 
     alert ("fail" + data); 
    } 
}) 

與上面的代碼我得到這個錯誤:

XMLHttpRequest cannot load https://www.google.com/. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://sdlweb-dev:1234' is therefore not allowed access. The response had HTTP status code 405. 

我嘗試添加如下代碼

 headers: { 
      "Access-Control-Allow-Origin": "*", 
      "Access-Control-Allow-Headers": "X-Requested-With,content-type", 
      "Access-Control-Allow-Credentials": true 
     } 

,但仍然得到了同樣的錯誤。

我試着將dataType從'json'改爲'jsonp'。通過這種方式,請求被髮送,但由於響應不JSONP,我得到了另一個錯誤:

Uncaught SyntaxError: Unexpected token < 

,而無需修改服務器端(我的意思是我送get請求的url,因爲我沒有訪問),我可以發送CORS請求嗎?

任何幫助表示讚賞!

感謝,

回答

0

必須訪問服務器代碼,以便使CORS請求。

您顯示的標題應該是響應中發送的標題,而不是請求中的標題。

+0

謝謝!通過服務器,你的意思是我試圖訪問的服務器,對吧? (不是我的服務器,我託管我的網站) – Feiiiiiiiiiiiii

+0

此外,我能夠通過將dataType設置爲「jsonp」來獲得響應。但由於返回的數據類型不是「jsonp」,是否有辦法以某種方式包裝它並獲取內容? – Feiiiiiiiiiiiii

+0

@Feiiiiiiiiiiiii回答你的第一條評論:是的。回答你的第二個問題:不。 – idbehold