簡體   English   中英

解析從NODE.js返回的JSON

[英]Parse JSON returned from NODE.js

我正在使用jQuery對Node.js進行AJAX調用以獲取一些JSON。 JSON實際上是在Node調用的Python child_process中“構建”的。 我看到JSON正在傳遞回瀏覽器,但是我似乎無法解析-盡管我可以從YQL查詢中解析JSONP。

進行呼叫的網頁與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"}

但是,當我嘗試如下解析JSON時:

alert(data.engineURL);

我不確定。 我幾乎在想我實際上並沒有傳遞回JSON對象,但是我不確定。

有人可以建議我在Python中構建JSON,從Node傳遞回JSON還是在網頁上無法正確解析JSON時做錯了嗎?

謝謝。

我幾乎在想我實際上並沒有傳遞回JSON對象,但是我不確定。

是的,ajax響應是一個字符串。 要獲取一個對象,您必須將該JSON字符串解析為一個對象。 有兩種方法可以做到這一點:

data = $.parseJSON(data);

或者,建議的方法是在$.ajax調用中指定dataType: 'json' 這樣,jQuery會在將響應傳遞給回調之前隱式調用$.parseJSON 另外,如果您使用$.get ,則可以將其替換為$.getJSON


也:

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

data事件的回調接收數據塊,您應該將其與已接收的數據連接起來。 您可能還沒有遇到任何問題,因為您的JSON很小,並且大多數時候都在一個塊中,但不要依賴它,請進行適當的串聯以確保您的數據包含所有塊,而不僅僅是最后一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM