2010-07-20 5 views
12

ho impostato NodeJS e sta tornando dati quando navigo all'URL: http://184.106.206.235NodeJS non tornerà dati jQuery.getJSON

Tuttavia, quando provo a chiamare tale URL utilizzando $.getJSON, gli spettacoli di callback null per la variabile data e "success" per la variabile textStatus.

Immagino che questa potrebbe essere una cosa del dominio incrociato, ma sono sorpreso che il dice "success" se questo è il caso.

Nel caso in cui è utile, ecco la JS lato server:

http.createServer(function(req, res){ 
    var output = {message: "Hello World!"}; 
    var body = JSON.stringify(output); 

    res.writeHead(200, {'Content-Type': 'application/json', 'Content-Length': body.length}); 
    res.end(body); 
}).listen(80, "184.106.206.235"); 

Tutte le idee?

+0

Is il JavaScript ospitato su 'http: // 184.106.206.235'? – Anurag

+0

Sì, anche se sto tentando di accedervi utilizzando "client" JS ospitato su un dominio diverso. – marclar

+0

Bene, allora sarebbe il tuo problema. Quale "stato del testo"? – Pointy

risposta

16

Aggiungere il "Access-Control-Allow-Origin": "*" proprietà alla writeHead() chiamata:

res.writeHead(200, { 
    "Content-Type": "application/json", 
    "Access-Control-Allow-Origin": "*" 
}); 
+0

Grazie, è un'ottima risposta !!! – oivoodoo

+0

Il tipo di contenuto per i dati di JSON dovrebbe essere application/json, vedere la domanda http://stackoverflow.com/questions/477816/the-right-json-content-type –

3

Solo una nota per tutti coloro che hanno lo stesso problema, la soluzione di cui sopra ha lavorato per me con un'alterazione minore:

"Content-Type": "application/json"

Non "text/json" .

Grazie per la soluzione! Mi stava facendo impazzire.

2

se si utilizza express quadro si può provare una delle seguenti opzioni:
1. res.contentType('json'); per impostare il tipo di contenuto.
2. res.send({ some: 'json' }); che imposterà il tipo di contenuto e lo analizzerà per te.
3. res.json({ user: 'tj' }); probabilmente il modo migliore per farlo.

Speranza che aiuta :)