2016-03-05 82 views
0

我想在點擊事件中使用ajax調用servlet。從這個servlet我打電話給谷歌驗證終點。我試着設置標題,我打電話servlet的,但我的沒能擺脫這種錯誤無法使用ajax調用servlet

了XMLHttpRequest無法加載 https://accounts.google.com/o/oauth2/auth?client_id=2536-a ...... NID%20profile%20email &狀態= F1BFD3804 &顯示=彈出。 請求的 資源上沒有「Access-Control-Allow-Origin」標題。原因'http://localhost:8080'因此不允許 訪問。

下面是代碼

$.ajax({ 
       type: "GET", 
       url: "/url-for-servlet", 
       dataType: "jsonp", 
       contentType: 'application/json', 
       error: function (jqXHR, textStatus, errorThrown) { 
        console.log(jqXHR) 
       }, 
       success: function (data) { 
        alert("yippy"); 
        console.log(data); 

       } 
      }); 

上的servlet我加入到反應

response.addHeader("Access-Control-Allow-Origin", "*"); 
     response.addHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); 
     response.addHeader("Access-Control-Max-Age", "3600"); 
     response.addHeader("Access-Control-Allow-Headers", "x-requested-with"); 

任何想法,我在這裏失蹤?謝謝您的幫助。

+0

這些標題需要由目標網址(因此,accounts.google.com)設置。無法做到應該已經暗示你不允許用目標服務來做這些事情。尋找一個不同的解決方案,通常基於他們自己的API文檔。然而,你的問題很奇怪,因爲錯誤不是迄今爲止發佈的代碼造成的。也許你過分簡化/省略了太多? – BalusC

回答

0

這是一個標準的安全限制:JS無法向除自己以外的域發出請求。因此,您有一個應用程序localhost將應用程序的Ajax調用發送到accounts.google.com - 默認情況下不允許。

this question

+0

你有沒有用完重複選票? – BalusC

0

AJAX通常不允許從中調用其他域API。它被稱爲CSRF攻擊。您的解決方案是,將數據發佈到您的服務器servlet,並在後端(Servlet)中執行所需的操作。