3

编辑

确保不要并列请求和响应对象。如果你不这样做,事情会更容易。

我正在尝试将具有两个输入的表单中的数据发布到特定的 url 节点响应。最初我使用 javascript xmlHTTPrequest 对象来发送它。数据已收到,但节点永远无法读取我尝试发送的 JSON 格式的对象。这是我将其转换为字符串时的样子:

{ output: [], 
  outputEncodings: [],
  writable: true,
  _last: false,
  chunkedEncoding: false,
  shouldKeepAlive: true,
  useChunkedEncodingByDefault: true,
  _hasBody: true,
  _trailer: '',
  finished: false,
  socket: 
   { _handle: 
      { writeQueueSize: 0,
        socket: [Circular],
        onread: [Function: onread] },
     _pendingWriteReqs: 0,
     _flags: 0,
     _connectQueueSize: 0,
     destroyed: false,
     errorEmitted: false,
     bytesRead: 8442,
     bytesWritten: 1669569,
     allowHalfOpen: true,
     writable: true,
     readable: true,

这不是完整的字符串。我转而使用 ajax 发布请求,因为我认为 serializearray() 可能会创建节点可以读取的不同格式,但它是相同的。我的服务器端代码基本上只是:

function email(request, response)
  form = '';
  request.setEncoding("utf8");
  request.on('data', function(chunk) {
    console.log('data received');
    form += chunk.toString();
  });

  request.on('end', function() {
    console.log('done receiving post data');
  });

我的表格看起来像这样

  <form name="email" action="javascript:true;">
    <input type="text" name="address" value="Enter your email address" onFocus="this.value=''">
    <input class="special" type="text" name="honeypot">
    <input type="submit" value="submit">
  </form>

如果我尝试使用 JSON.parse 解析,则会出现由意外导致的错误 o
如果我尝试使用 querystring 解析,它会返回一个空对象
如果我尝试类似 console.log(form.address) 的输出未定义但应该是一个我在表单中提交的值。

我的 http 服务器将路由到 /email,这是响应 /email 的函数。

我检查并知道 on 'data' 事件尚未过期,因为我的代码设置为通知我“data”事件并且我可以看到事件正在发生。在本地,这段代码工作正常,我可以读取提交的数据,但在开发服务器上它不起作用。

我知道人们会说我应该使用 connect 或 express 但假设这不是一个选项,我怎样才能让节点正确处理这些数据?提交表单的jquery或多或少是标准的。非常感谢!

编辑:

抱歉,我认为问题会得到解决,因为我立即注意到发布的字符串不是 JSON。这是我用来发送帖子的代码。

$(document).ready(function() {
  $("#email").submit(function(event) {
  event.preventDefault();
  var data = $(this).serializeArray();
  $.ajax({
    type: 'POST',
    dataType: 'json',
    url: '/email',
    data: JSON.stringify(data),
    success: function(msg) {
    $("#aviso").html(msg);
    }
    });
  });
}); 

这是数据变量保存的字符串:

[
  {
    "name": "address",
    "value": "foo@bar.com"
  },
  {
    "name": "honeypot",
    "value": "irobot"
  }
]

这是根据 jsonlint 的有效 JSON。但是当它到达服务器时仍然是同样的错误。节点处理“数据”事件,在我尝试解析字符串之前一切都很好,它会导致错误未定义:1 意外 o。

4

1 回答 1

1

您发送的数据不是有效的 JSON,它要求所有对象键都用双引号引起来

于 2012-04-06T16:51:32.977 回答