【问题标题】:Not getting the array from Node.js to AJAX没有将数组从 Node.js 获取到 AJAX
【发布时间】:2017-04-10 20:48:01
【问题描述】:

您好,根据我的代码,我似乎没有到达或响应从 Node.js 到 AJAX 的数组,没有其他错误或其他错误,但我似乎无法弄清楚我的代码有什么问题,请参见下文。提前感谢您的帮助!

AJAX 代码如下:

function update() {
let rq = new XMLHttpRequest();
    rq.onreadystatechange = function() {
        if(rq.readyState == 4) {
        var arr = JSON.parse(rq.responseText);
        for(var i = 0; i < arr.length; i++) {
        document.getElementById("message").innerHTML += "<p>" + arr[i] + "</p>";
        }
    }
    rq.open("GET", "/messages", true);
    rq.send();
  }
}

处理 GET 的 Node.js 代码:

if(req.method == "GET") {
  req.on('data', function(data) {
    console.log("You are reching GET-DATA");
  });
  req.on('end', function() {
    console.log("You are reching GET-END");
    res.writeHead(200, { "Content-Type" : "application/json" })
    console.log(JSON.stringify(arr))
    var toString = JSON.stringify(arr);
    res.end(JSON.stringify(arr));
  });
}

我到达 console.log(req.readystate) 并且它输出 "1", alert("Your program reached rq.onreadystatechange"); alert("Your program达到 rq.onreadystatechange = 4"); 然后过一会儿就会收到响应,我在控制台上看到错误。

【问题讨论】:

  • 放入 console.log 并检查您得到的响应。
  • 正确的代码缩进可以更容易地查看问题所在,并且 Chrome 调试器中的网络选项卡将有助于查看在何处查找问题。
  • @jfriend00:我在控制台或浏览器中没有错误,当它被发送回 AJAX 时,我也无法 console.log() 数组。它没有达到就绪状态 4。
  • @maheshiv:如果我执行 console.log(rq.responseText),则不会输出任何打印,它没有达到 readystate = 4。
  • 我的意思是,如果您查看调试器中的网络选项卡,您会发现您的请求从未被发送,这将是一个重要的线索。

标签: javascript html ajax node.js


【解决方案1】:

ajax 代码在onreadystatechange 回调中具有opensend。您需要将其移出:

function update() {
    console.log('update called');
    let rq = new XMLHttpRequest();
    rq.onreadystatechange = function() {
        console.log('readyState: ' + rq.readyState);
        if(rq.readyState == 4) {
            console.log('responseText: ' + rq.responseText);
            var arr = JSON.parse(rq.responseText);
            for(var i = 0; i < arr.length; i++) {
                document.getElementById("message").innerHTML += "<p>" + arr[i] + "</p>";
            }
        }
    };
    // moved out of above function
    rq.open("GET", "/messages", true);
    rq.send();
}

通过添加一些console.log 调用,您还可以更好地了解正在(未)发生的事情。

【讨论】:

  • 我在函数之外添加了它,谢谢你指出这一点。
猜你喜欢
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-11
  • 2020-02-23
相关资源
最近更新 更多