2013-08-09 5 views
5

Ho eseguito il comando di arricciatura utilizzando il seguente input per mongoDB.Esegui il comando di arricciatura usando jquery-ajax

curl --data 'cmd={"geoNear" : "items", "near":[6.8590845,79.9800719]}' 'http://72.123.xxx.xxx:27080/weather/_cmd' 

Voglio eseguirlo utilizzando jsonp o json e ottenere la risposta. Ho cercato di seguito la richiesta di jsonp.

var url = "http://72.123.xxx.xxx:27080/weather/_cmd"; 
$.getJSON(url + "?callback=?", 
    { 
     cmd:{"geoNear" : "items", "near": 6.8590845,79.9800719]} 
    }, 
    function(tweets) { } 
); 

Non ho ricevuto nulla dalla console. Per favore aiutatemi con questo. Grazie.

+0

[Cosa hai provato?] (Http://mattgemmell.com/2008/12/08/what-have-tried/) – freakish

+0

I Aggiorna la domanda Siamo spiacenti. – ambarox

risposta

5

Finalmente arrivo la soluzione.

$.ajax({ 
    url: '/weather/_cmd', 
    type:'POST', 
    dataType: 'json', 
    crossDomain : true, 
    data: { 
     cmd: JSON.stringify({ 
      "geoNear" : "items", 
      "near": [6.8590845,79.9800719] 
     }) 
    }, 
    success: function(res) { 
     //do stuff with res 
    } 
}); 

ProxyPass /weather http://72.123.xxx.xxx:27080/weather/_cmd 
ProxyPassReverse /weather http://72.123.xxx.xxx:27080/weather/_cmd 

Aggiungi sopra Proxy passare ad Apache e provare questo. Funzionerà. problema è che non riesci a passare la richiesta POST usando jsonp. mongo abbiamo bisogno di richieste POST. questo è un modo per farlo. : D l'ho provato e funziona perfettamente per me. non accetterà json e dovrai passarlo come stringa.

1

Probabilmente ottiene nulla perché o l'istanza MongoDB non supporta JSONP (e ne avete bisogno perché normalmente non si può fare richieste Ajax cross-domain) o la query non è corretta (a quanto pare è necessario utilizzare ?jsonp= invece di ?callback=).

Un modo sarebbe utilizzare direttamente JSONP. Dal momento che si sta utilizzando jQuery si potrebbe provare qualcosa di simile:

$.ajax({ 
    url: 'http://72.123.xxx.xxx:27080/weather/_cmd', 
    dataType: 'jsonp', 
    jsonp: 'jsonp', // <-- the name used in '?jsonp=' part of url 
    data: { 
     cmd: { 
      "geoNear" : "items", 
      "near": [6.8590845,79.9800719] 
     } 
    }, 
    success: function(res) { 
     console.log(res); 
    } 
}); 

Secondo questa risposta StackOverflow:

Does MongoDB have a native REST interface?

dovrebbe funzionare se si spara esempio MongoDB con --jsonp opzione (al fine di consentire supporto di JSONP). Non l'ho provato però.

Inoltre, potrebbero esserci altri problemi. Ad esempio il database può semplicemente abbandonare la connessione, potresti non avere i privilegi, ecc. In genere non è mai una buona idea connettersi direttamente dal client al database. Dovresti usare un server web come un uomo nel mezzo.

+0

Io uso il tuo codice e non funziona però. Il comando Curl funziona perfettamente e mi dà sempre l'output. Mi aiuti per favore. – ambarox

+0

Mongo non ha accettato il json ed è andato come una stringa. il problema principale viene da quello. quindi jsonp non ha supportato richieste post e mongo accetta solo post. Finalmente ho trovato la soluzione. – ambarox