parsing从NODE.js返回的JSON

我正在使用jQuery对Node.js进行AJAX调用以获得一些JSON。 JSON实际上是由Node调用的Python child_process“构build”的。 我看到JSON被传回到浏览器,但我似乎无法parsing它 – 虽然我可以从YQL查询parsingJSONP。

进行调用的网页和Node是在同一台服务器上,所以我不认为在这种情况下我需要使用JSONP。

这里是代码:

index.html(片段)

function getData() { $.ajax({ url: 'http://127.0.0.1:3000', dataType: 'json', success: function(data) { $("#results").html(data); alert(data.engineURL); // alerts: undefined } }); } 

server.js

 function run(callBack) { var spawn = require('child_process').spawn, child = spawn('python',['test.py']); var resp = ''; child.stdout.on('data', function(data) { resp = data.toString(); }); child.on('close', function() { callBack(resp); }); } http.createServer(function(request, response) { run(function(data) { response.writeHead(200, { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin' : '*' }); response.write(JSON.stringify(data)); response.end(); }); }).listen(PORT, HOST); 

test.py

 import json print json.dumps({'engineName' : 'Google', 'engineURL' : 'http://www.google.com'}) 

AJAX调用返回后,我执行以下操作:

 $("#results").html(data); 

并在网页上打印以下内容:

 {“engineURL": "http://www.google.com", "engineName": "Google"} 

但是,当我尝试和parsingJSON如下所示:

 alert(data.engineURL); 

我弄不明白 我差不多在想,我实际上并没有传回一个JSON对象,但我不确定。

任何人都可以build议,如果我做错了什么东西在Python中构buildJSON,从节点传回JSON,或只是不正确地parsing网页上的JSON?

谢谢。

我差不多在想,我实际上并没有传回一个JSON对象,但我不确定。

是的,ajax响应是一个string。 要得到一个对象,你必须把这个JSONstringparsing成一个对象。 有两种方法可以做到这一点:

 data = $.parseJSON(data); 

或者,推荐的方法是在$.ajax调用中指定dataType: 'json' 。 这样jQuery将隐式调用$.parseJSON的响应,然后传递给callback。 另外,如果您使用$.get ,则可以用$.getJSONreplace它。


也:

 child.stdout.on('data', function(data) { resp = data.toString(); // ^ should be += }); 

data事件的callback接收到大量的数据,你应该把它和你已经收到的数据连接起来。 你可能还没有遇到过这个问题,因为你的JSON很小,大部分时间都在一个块中,但是不要依赖它,做适当的连接来确保你的数据包含了所有的块,而不仅仅是最后一个。