【问题标题】:$.ajax Where is req.data? [duplicate]$.ajax req.data 在哪里? [复制]
【发布时间】:2017-05-22 00:04:46
【问题描述】:

我正在使用 node.js。这是本地服务器上相当简单的文件排列。

<h3>To Do!</h3>
<ol class="pending>
<li><a class="pending_task" href="localhost://nextstep.html">Task Three</a></li>
<li><a class="pending_task" href="localhost://nextstep.html">Task Five</a></li>
<li><a class="pending_task" href="localhost://nextstep.html">Task Six</a></li>
</ol>

<h3>Completed!</h3>
<ol class="completed">
<li><a class="completed_task" href="localhost://nextstep.html">Task One</a></li>
<li><a class="completed_task" href="localhost://nextstep.html">Task Two</a></li>
<li><a class="completed_task" href="localhost://nextstep.html">Task Four</a></li>
</ol>

是同一页面上的列表。我终于让 ajax 调用按要求工作了,现在我遇到了最新的故障。

$.ajax 重定向到正确的 url 并建立连接,但是当我执行 console.log(req.data) 时没有数据

AJAX 调用:

var newData = "<ol class=\"pending\">" + $('ol.pending').html() + 
            "</ol>" + "<ol class=\"completed\">" + $('ol.completed').html() + "<\ol>";

        $.ajax({
            method:'POST',
            data: newData,
            url: ajax_url,
            success: function(result, status, jqxhr){
                console.log("Response: " + jqxhr.responseText);
                console.log("POST status: " + status);
            },
            dataType: 'html',
        });

app.js

http.createServer(function(req, res){
  if ((req.method === 'POST') && (req.url === '/result')){
        console.log("Request Data: " + req.data);
        res.statusCode = 200;
        res.end("Message Received!");
  }
 }).listen(port, serverURL);

我的预期结果是在将旧安排写入新文件名 (TODO_date_time.html) 之后,用新的已完成/待处理安排重写原始文件,因为生成的数据通过了,所以我还不能这样做到 AJAX 调用没有被传输。或者我没有预先访问它。

我得到的是:

[nodemon] starting `node app.js`
Starting Web Server at local:4000
Request Data: undefined

浏览器中的console.log一切正常:

目前不确定我的工作有什么问题。

【问题讨论】:

  • 可能。我将重新访问该条目。
  • 没有。因为我不需要查询字符串。
  • 您可能想检查my answer 到另一个问题。我详细解释了。

标签: javascript jquery ajax node.js


【解决方案1】:

我用过这个

var body = ''     
request.on('data', function (data) {
  body += data;
});

来自Casey Chu对我可能重复的问题的回答。

【讨论】:

  • 确保你使用request.setEncoding,否则你可能会遇到多字节字符的问题。
  • 没有。没有多字节字符。我知道数据的性质。
【解决方案2】:

如果您只需要功能,上面建议的重复问题有详细说明使用Express 简化http 服务器。

否则,问题是数据尚不可用,因为它以块的形式出现。为了解决这个问题,在您检测到它是对 /result 端点的 POST 请求的内部需要使用事件侦听器。

http.createServer(function(req, res) {
    if ((req.method === 'POST') && (req.url === '/result')) {
        console.log("POST request to /result received");

        req.on('data', function(chunk) {
            console.log('Received data: ', chunk.toString());
        });

        req.on('end', function() {
            res.statusCode = 200;
            res.end("Message Received!");
        });

    }
}).listen(port, serverURL);

另外,这里有一个JSFiddle的链接

【讨论】:

  • 感谢您提供的信息,但是,我不想使用 Express。我想在更简单的层面上理解这一点,而不仅仅是获得结果。
  • 所以我需要 req.on 来绑定数据?
  • 我在另一个问题中使用了这个:req.on('data', function(data){ body += data; //console.log(data); });
  • 我将 html 作为来自 ajax 调用的数据。为什么我需要对其进行字符串化?
  • 简而言之,这是因为块是二进制数据的缓冲区,您需要将它们转换为可读的表示形式。请参阅stackoverflow.com/a/16542217/6407261 了解更多详情。
猜你喜欢
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 2012-12-05
  • 1970-01-01
  • 1970-01-01
  • 2014-11-06
  • 2015-12-10
  • 1970-01-01
相关资源
最近更新 更多