我使用下面的curl命令以json格式从远程服务器上托管的Druid集群中获取数据
curl -X POST "http://www.myserverIP.com:8080/druid/v2/" -H 'content-type: application/json' -d '{"queryType": "groupBy","dataSource": "twsample","granularity": "none","dimensions": ["created_at"],"aggregations": [{"type": "count", "name": "tweetcount"}],"intervals": ["2013-08-06T11:30:00.000Z/2020-08-07T11:40:00.000Z"]}'
但我无法创建一个等效的javascript方法,它将执行相同的操作,我使用下面的代码来执行此操作。
function sendCurlRequest(){
var json_data = {
"queryType": "groupBy",
"dataSource": "twsample",
"granularity": "none",
"dimensions": ["created_at"],
"aggregations": [
{"type": "count", "name": "tweetcount"}
],
"intervals": ["2013-08-06T11:30:00.000Z/2020-08-07T11:40:00.000Z"]
};
$.ajax({
cache : false,
type: 'POST',
crossDomain:true,
url: 'http://www.myserverIP:8080/druid/v2/',
data:json_data,
//dataType: "jsonp",
contentType:"application/jsonp",
success: function(data){
alert(data);
var pubResults = data;
},
error: function(data){
alert("ERROR RESPONSE FROM DRUID SERVER : "+JSON.stringify(data));
},
complete: function(data){
console.log("call completed");
}
});
}
任何帮助将不胜感激。
答案 0 :(得分:6)
cURL能够跨域发送和接收数据到远程服务器,但出于安全原因,javascript不是这种情况
我相信你的选择
1)使用CORS
设置远程服务器上的标头以接受跨域调用(如果您有权访问服务器),thriqon也指出
2)使用来自服务器的jsonP
格式响应(如果您可以控制响应的生成方式或者是否已经采用jsonP格式,则再次使用)
3)编写一个server-side proxy
,作为您的呼叫和远程服务器之间的中介。然后,您可以格式化代理上的标头或响应,以使其能够响应跨域调用