我想调用一个发布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编写。
答案 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)