2016-03-05 54 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)中执行所需的操作。