一尘不染

CORS-通过允许服务器上的原始不使用JSONP的跨域AJAX

ajax

我在同一服务器上有两个单独的应用程序,其中EmberJS试图对我的后端API进行跨域调用。

我设置了后端API,以允许来自该特定来源的跨域请求。但是,有没有办法避免通过这种设置使用JSONP?$.ajax在跨域请求发送之前将其阻止。如果不是,那么CORS的意义何在?我实现了哪个服务器端来接受来自JS前端源的请求?

编辑

AJAX请求:

$.ajax({
    url: "api.lvh.me:3000/accounts/login",
    data: cred,
    type: "POST",
    xhrFields: {
        withCredentials: true
    },
    success: function(response){
        alert('succeeded!');
        console.log(response);
        alert(response);
    },
    failure: function(message){
        alert("failed");
        console.log(message);
        alert(message);
    }
});

阅读 195

收藏
2020-07-26

共1个答案

一尘不染

如果启用了CORS,则无需使用JSONP。

Access-Control-Allow-Origin: http://www.example.com

如果在响应中设置了此标头,则普通的XmlHttpRequest将能够像访问相同域一样访问响应。检查此头是否设置正确。

我希望如果您使用jquery,此链接将对您有所帮助。CORSPOST请求可通过纯javascript工作,但为什么不使用jQuery?

更新:示例

var xmlhttp= new XMLHttpRequest();
var url="https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS?redirectlocale=en-US&redirectslug=HTTP_access_control";
xmlhttp.open("GET",url,false);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
xmlhttp.send();

在任何域中尝试此操作,您都会得到回应。

更新解决方案:

请求网址中未包含“ http://”的URL引起了问题,在前缀“ http://”之前已解决了该问题

2020-07-26