CORS - 不使用JSONP的跨域AJAX,允许在服务器上使用Origin

dar*_*sky 8 javascript ajax ruby-on-rails cross-domain ember.js

我在同一台服务器上有两个独立的应用程序,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);
    }
});
Run Code Online (Sandbox Code Playgroud)

Bal*_*ath 9

如果启用CORS,则无需使用JSONP.

Access-Control-Allow-Origin: http://www.example.com
Run Code Online (Sandbox Code Playgroud)

如果在响应中设置了此标头,则正常的XmlHttpRequest将能够访问响应,就好像它与同一个域一样.检查此标头是否设置正确.

我希望这个链接可以帮助你,如果你使用jquery 一个CORS POST请求工作从普通的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();
Run Code Online (Sandbox Code Playgroud)

在任何域中尝试此操作,您将得到响应.

更新方案:

请求没有"http://"的网址导致问题,在"http://"之前解决了问题

  • 我们如何*启用CORS ??* (6认同)