Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有办法告诉我何时收到node/express的ajax请求?_Javascript_Node.js_Ajax_Express_Fs - Fatal编程技术网

Javascript 有没有办法告诉我何时收到node/express的ajax请求?

Javascript 有没有办法告诉我何时收到node/express的ajax请求?,javascript,node.js,ajax,express,fs,Javascript,Node.js,Ajax,Express,Fs,我正在运行一个node/express服务器,它发送ajax-start.html文件。ajax-start.html文件中有一个向服务器发出ajax请求的脚本。一切都很好。但是,当服务器收到ajax请求时,我希望能够在发送文本文件之前修改它。(我对此非常陌生,正在尝试修改MDN中的一个示例以满足我的需要。) HTML(ajax start.HTML): 无法检测Ajax请求本身,但HTTP有许多选项可用于提供不同版本的内容 如果您希望以不同的格式提供相同的数据(例如,对于直接请求,HTML是很

我正在运行一个node/express服务器,它发送ajax-start.html文件。ajax-start.html文件中有一个向服务器发出ajax请求的脚本。一切都很好。但是,当服务器收到ajax请求时,我希望能够在发送文本文件之前修改它。(我对此非常陌生,正在尝试修改MDN中的一个示例以满足我的需要。)

HTML(ajax start.HTML):


无法检测Ajax请求本身,但HTTP有许多选项可用于提供不同版本的内容

如果您希望以不同的格式提供相同的数据(例如,对于直接请求,HTML是很常见的,对于Ajax请求,JSON是很常见的),那么您可以使用(服务器端代码默认为HTML,除非
Accept
头(可通过
req.headers
)表示对JSON的偏好)

如果您想提供细微不同的内容,那么可以在URL上使用查询字符串(
req.query

显著不同的内容通常最好使用完全不同的端点


您还可以使用非标准的
X-request-With
,但您可以将其添加到
setRequestHeader
,因为这是表示“这是Ajax”的常见模式。不过,它确实避免了标准方法,所以我不推荐它。

您可以使用
标题检查
X-request-With
标题。对于AJAX,它将是
XMLHttpRequest
。@Barmar-这是一个非标准的头文件,只有一些第三方AJAX库才会添加。为什么需要区分AJAX?只需为它们使用不同的端点即可。“一切正常”-
textFiles/
端点在哪里?这些文件目前是否由
express.static
提供?@Barmar----如果我能判断请求是ajax,我可以在通过ajax发送之前修改这些文件。即使问题标题要求“告诉我何时收到ajax请求”,OP的实际问题是“我希望能够在发送文本文件之前修改它”。@Bergi-他们说他们想这样做,但声明的问题是检测Ajax请求……一旦问题解决,修改文本文件大概是他们计划做的事情(他们没有提供细节,因此无论如何也无法回答)。
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <title>Ajax starting point</title>

    <style>
      html,
      pre {
        font-family: sans-serif;
      }

      body {
        width: 500px;
        margin: 0 auto;
        background-color: #ccc;
      }

      pre {
        line-height: 1.5;
        letter-spacing: 0.05rem;
        padding: 1rem;
        background-color: white;
      }

      label {
        width: 200px;
        margin-right: 33px;
      }

      select {
        width: 350px;
        padding: 5px;
      }
    </style>
    <!--[if lt IE 9]>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.js"></script>
    <![endif]-->
  </head>

  <body>
    <h1>Ajax starting point</h1>

    <form>
      <label for="verse-choose">Choose a verse</label>
      <select id="verse-choose" name="verse-choose">
        <option>Verse 1</option>
        <option>Verse 2</option>
        <option>Verse 3</option>
        <option>Verse 4</option>
      </select>
    </form>

    <h2>The Conqueror Worm, <em>Edgar Allen Poe, 1843</em></h2>

    <pre></pre>

    <script>
      const verseChoose = document.querySelector("select");
      const poemDisplay = document.querySelector("pre");

      verseChoose.onchange = function () {
        const verse = verseChoose.value;
        updateDisplay(verse);
      };

      function updateDisplay(verse) {
        verse = verse.replace(" ", "");
        verse = verse.toLowerCase();
        let fname = verse + ".txt";
        let url = `textFiles/${fname}`;

        let request = new XMLHttpRequest();
        request.open("GET", url);
        request.responseType = "text";

        request.onload = function () {
          poemDisplay.textContent = request.response;
        };
        request.send();
      }
    </script>
  </body>
</html>
const express = require("express");
const fs = require("fs");
const app = express();
app.use(express.static(`assets`));

app.get("/", (req, res) => {
  res.sendFile(__dirname + "/ajax-start.html");
});

app.listen(5000, () => {
  console.log(`listening`);
});