无法使用ajax调用servlet

时间:2016-03-05 12:39:34

标签: java ajax servlets

我试图在click事件上使用ajax调用servlet。从那个servlet我称之为google auth终点。我尝试将set头设置为我正在调用的servlet但是我无法摆脱这个错误

  

XMLHttpRequest无法加载   https://accounts.google.com/o/oauth2/auth?client_id=2536-a ... NID%20profile%20email&安培;状态= F1BFD3804&安培;显示弹出=。   No' 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");

知道我在这里缺少什么吗?谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

这是一个标准的安全限制:JS无法向自己以外的域发出请求。因此,您在localhost上有一个应用程序,在accounts.google.com上调用应用程序的Ajax - 默认情况下不允许。

请参阅this question

答案 1 :(得分:0)

AJAX通常不允许从中调用其他域API。它被称为CSRF攻击。您的解决方案是,将数据发布到服务器servlet并在后端(Servlet)中执行所需的操作。