8

我正在使用以下 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");
     }
   });
}

任何帮助将不胜感激。

4

1 回答 1

7

cURL 能够跨域向远程服务器发送和接收数据,但出于安全原因,javascript 并非如此

我相信你的选择是

1)用于CORS在远程服务器上设置标头以接受跨域调用(如果您可以访问服务器),也由 thriqon 指出

2)使用jsonP来自服务器的格式响应(如果您可以控制响应的生成方式或者它已经是 jsonP 格式)

3)编写一个server-side proxy充当您的呼叫和远程服务器之间的中介。然后,您可以格式化代理上的标头或响应,以使其能够响应跨域调用

于 2013-08-27T22:31:59.700 回答