我需要发送的XMLHttpRequest到Yandex的服务器获取错误的请求错误400试图发送XMLHttpRequest来http://api.lbs.yandex.net/geolocation
我得到的错误请求错误(400)和:
XMLHttpRequest无法加载http://api.lbs.yandex.net/geolocation。否 “访问控制 - 允许来源”标题出现在请求的 资源中。因此不允许访问原产地'http://localhost'。 响应了HTTP状态代码400
这里是我的代码:
var xhr = new XMLHttpRequest();
var url = "http://api.lbs.yandex.net/geolocation";
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.onreadystatechange = function() {
<some code>
};
var data = JSON.stringify({
"common": {
"version": "1.0",
"api_key": <here goes API key>
},
"gsm_cells": [
{
"countrycode": params[0],
"operatorid": params[1],
"cellid": params[3],
"lac": params[2],
"age": 0
}
]
});
xhr.send(data);
我无法找到解决方案,这样简单的事情(?)!
Thx为快速和很好解释的答案!你是对的,在数据查询中加入“json = ...”可以修复第一个错误。 虽然我认为必须有另一个解决方案,但代理来解决第二个问题,因为yandex.geolocation是一个公共服务,并且必须处理来自不同服务器的请求。 –
是的,它可以从任何非浏览器工具或后端编程运行时工作,但只要它能够直接从浏览器中运行的前端JavaScript代码生成请求,我保证绝对没有任何其他方式可以使其工作以外的其他方式使用答案中描述的方式使用CORS代理。浏览器会阻止你的代码进入响应,因为浏览器在默认情况下会阻止对来自跨源请求的响应的所有访问,并且唯一的方法就是让它们不会像那样阻塞,就是让它们成为Access-Control-Allow-Origin响应头 – sideshowbarker