Ответ 1
Чтобы получить событие "данных" для запуска на стороне сервера node.js, вы должны ПОСЛАТЬ данные. То есть событие "данные" реагирует только на данные POSTed. Задание "jsonp" в качестве формата данных заставляет GET-запрос, поскольку jsonp определен в документации jquery как:
"jsonp": загрузка в блоке JSON с использованием JSONP. Добавляет дополнительный "? Callback =?" до конца вашего URL-адреса, чтобы указать обратный вызов
Вот как вы модифицируете клиента, чтобы запустить событие данных.
Клиент:
<html>
<head>
<script language="javascript" type="text/javascript" src="jquery-1.8.3.min.js"></script>
</head>
<body>
response here: <p id="lblResponse">fill me in</p>
<script type="text/javascript">
$(document).ready(function() {
$.ajax({
url: 'http://192.168.0.143:8080',
// dataType: "jsonp",
data: '{"data": "TEST"}',
type: 'POST',
jsonpCallback: 'callback', // this is not relevant to the POST anymore
success: function (data) {
var ret = jQuery.parseJSON(data);
$('#lblResponse').html(ret.msg);
console.log('Success: ')
},
error: function (xhr, status, error) {
console.log('Error: ' + error.message);
$('#lblResponse').html('Error connecting to the server.');
},
});
});
</script>
</body>
</html>
Некоторые полезные строки, которые помогут вам отладить серверную часть:
Сервер:
var http = require('http');
var util = require('util')
http.createServer(function (req, res) {
console.log('Request received: ');
util.log(util.inspect(req)) // this line helps you inspect the request so you can see whether the data is in the url (GET) or the req body (POST)
util.log('Request recieved: \nmethod: ' + req.method + '\nurl: ' + req.url) // this line logs just the method and url
res.writeHead(200, { 'Content-Type': 'text/plain' });
req.on('data', function (chunk) {
console.log('GOT DATA!');
});
res.end('callback(\'{\"msg\": \"OK\"}\')');
}).listen(8080);
console.log('Server running on port 8080');
Цель события данных на стороне node состоит в том, чтобы создать тело - он срабатывает несколько раз за один HTTP-запрос, один раз для каждого фрагмента данных, который он получает. Это асинхронный характер node.js - сервер выполняет другую работу между получением блоков данных.