我的javascript api不适用于“Access-Control-Allow-Origin'missing”错误

时间:2017-11-04 13:51:51

标签: javascript json api header

我想调用一个发布JSON的API:

    "user": {
        "username": "username",
        "password": "pass",
        "password_confirmation": "passconfirm",
        "user_type": "admin"
    },
    "profile": {
        "first_name": "firstname",
        "last_name": "lastname"
    }

它适用于Postman,Android和Python,但不幸的是,当我使用以下代码测试Javascript时:

function sendData() {
/*
    get json value from HTML form.
*/
    var firstname = document.forms["registerForm"]["first_name"].value;
    var lastname = document.forms["registerForm"]["last_name"].value;
    var pass = document.forms["registerForm"]["password"].value;
    var passconfirm = document.forms["registerForm"]["password_confirmation"].value;
    var username = document.forms["registerForm"]["username"].value;

    var json_date = {
        "user": {
            "username": username,
            "password": pass,
            "password_confirmation": passconfirm,
            "user_type": "admin"
        },
        "profile": {
            "first_name": firstname,
            "last_name": lastname
        }
    };

    var data = JSON.stringify(json_date);
    console.log(json_date);
    var xhr = new XMLHttpRequest();
    xhr.withCredentials = true;

    xhr.addEventListener("readystatechange", function () {
        if (this.readyState === 4) {
            console.log(this.responseText);
        }
    });

    xhr.open("POST", send);
    xhr.setRequestHeader("content-type", "application/json");

    xhr.send(data);

}

我收到此错误:

  

原因:CORS hejquery'Access-Control-Allow-Origin'缺失

我使用console.log()打印json文件,然后我看到了我的json文件。

但不发送到服务器。

我也试过jQuery。

我必须添加此注释,该服务器已使用RubyOnRails编写。

1 个答案:

答案 0 :(得分:0)

这是因为CORS(跨源资源共享)

  

跨源资源共享(CORS)是一种机制,它使用其他HTTP标头让用户代理获得从与当前正在使用的站点不同的源(域)上的服务器访问所选资源的权限。

例如,如果您希望从http://foo.com http://bar.com发送请求来存储资源,则应在回复中添加Access-Control-Allow-Origin: *标题。

来源: Server-Side Access Control (CORS) Cross-Origin Resource Sharing (CORS)