2013-08-27 15 views
7

używam poniżej polecenia curl, aby uzyskać dane z Druid klastra hostowane na zdalnym serwerze w formacie jsonJavaScript ekwiwalent za zwinięcie polecenia

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"]}' 

ale nie jestem w stanie stworzyć odpowiednik javascript metoda, która zrobi to samo, używam poniżej kodu, aby to zrobić.

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"); 
    } 
    }); 
} 

Każda pomoc zostanie doceniona.

+1

co to jest komunikat o błędzie? czy jest jakiś? Podejrzewam, że problem z CORS/cross-origin ... – thriqon

+1

również, contentType powinien być "application/json" w części JS – thriqon

Odpowiedz

4

cURL jest w stanie wysyłać i odbierać domenę przekrój dane do zdalnych serwerów, ale to nie jest przypadek z javascript ze względów bezpieczeństwa

Twoje opcje wierzę są

1) Użyj CORS ustawić nagłówki na serwer zdalny do akceptowania wywołań międzydomenowych (jeśli masz dostęp do serwera), jak również wskazany przez Thriqon

2) Użyj odpowiedzi formatu z serwera jsonP (ponownie, jeśli masz kontrolę nad sposobem generowania odpowiedzi lub jeśli już jest w formacie jsonP)

3) Napisz server-side proxy, który działa jako pośrednik między połączeniami a serwerem zdalnym. Następnie można sformatować nagłówek lub odpowiedź na serwerze proxy, aby umożliwić mu reagowanie na wywołania między domenami: