2016-07-06 91 views
0

當我輸入這個URL,https://www.codewars.com/api/v1/code-challenges/valid-braces?access_key=apiKey(apiKey是一個實際的鍵的變量),進入我的瀏覽器,我能夠查看以JSON呈現的數據。但是,我繼續在控制檯中收到此錯誤消息:爲什麼我無法通過JavaScript發出API請求?

XMLHttpRequest無法加載https://www.codewars.com/api/v1/code-challenges/valid-braces?access_key=apiKey。請求的資源上沒有「Access-Control-Allow-Origin」標題。原因''因此不被允許訪問。

這裏是我的當前請求:

$.ajax({ 
    type: 'GET', 
    dataType: 'json', 
    url: 'https://www.codewars.com/api/v1/code-challenges/valid-braces?access_key=apiKey', 
    success: function(data) { 
    console.log(data); 
    }, 
    error: function() { 
    console.log('failed'); 
    } 
}); 
+1

跨域問題使用'jsonp'..Normally的API應該返回CORS頭允許跨域訪問。 –

+0

您正在請求來自不同域的內容,因此您需要請求跨域權限。你需要使用CORS。 http://www.html5rocks.com/en/tutorials/cors/ – DottedT

+0

@SusheelSingh將dataType從'json'改爲'jsonp'會返回一個新錯誤:'Uncaught SyntaxError:意外令牌:' – gabece

回答

0

的API應該有Access-Control-Allow-Origin: http://yourdomain.com的響應頭添加。可以使用*來允許所有域。

How does Access-Control-Allow-Origin header work?它是如何工作

更新會談:使用JSONP可能不正確的做法,但如果你真的需要嘗試這個

$.ajax({ 
    url: 'https://www.codewars.com/api/v1/code-challenges/valid-braces?access_key=apiKey&callback=', 
    dataType: 'JSONP', 
    type: 'GET', 
    async: false, 
    crossDomain: true, 
    success: function() {}, // don't use this, as this will never get executed 
    error: function() {}, // don't use this, as this gets executed for each request 
    complete: function (data) { 
    //a hack to handle request status 
    if (data.readyState == '4' && data.status == '200') { 
    alert('SUCCESS'); 
    } 
    else { 
    alert('FAIL'); 
    } 
    } 
}); 
+0

我沒有對API的直接控制權,所以我如何獲得我的域的訪問權限? – gabece

+0

將dataType從json更改爲jsonp會返回一個新錯誤:Uncaught SyntaxError:意外令牌: – gabece

相關問題