【问题标题】:Processing a POST or GET request without a server在没有服务器的情况下处理 POST 或 GET 请求
【发布时间】:2019-06-26 09:17:42
【问题描述】:

我正在阅读以下文章:

https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Client-side_web_APIs/Fetching_data

这里只是说明了 AJAX 的概念,但为了简单说明,不是连接到服务器,而是从包含浏览器的系统中获取内容。

因此,在上述链接的以下代码行中:

var url = verse + '.txt';
var request = new XMLHttpRequest();
request.open('GET', url);

这里的 GET 动词是在本地系统中获取文件的内容,并且那里没有服务器。

同样,在没有服务器的情况下使用 javascript 我们可以向 GET 或 POST 动词添加一些参数,并在本地系统中运行处理这些参数并发送输出的代码吗?

喜欢:

var url =  'verse + '.txt' + '?' 'name = ' + 'vim' ; //Adding parameters

并且会有一些javascript文件,它带有这些参数“name” 并以大写形式返回,如“VIM”。

我们可以在没有服务器监听的情况下只使用 Javascript(不是 nodejs 或任何设置服务器的东西)来做类似的事情吗?

【问题讨论】:

  • 是的,这个要求是可以的。
  • 我不这么认为。是的,您可以从本地文件系统访问文件 - 但您需要运行一些代码才能根据查询参数获得不同的结果,为此您需要一个服务器。 (它可能只是 localhost,但这仍然是一个服务器。)
  • @guest271314 :同时希望你正在写一个关于如何部分的答案...... :)
  • @RobinZigmond : 我可以从本地文件系统执行文件吗?
  • 使用 jQuery 的一种方法是使用 $.ajax()beforeSend 选项。可以以任何方式调整响应。可以使用URLSearchParams() 解析请求,并在发出请求之前将其转换为大写。有什么限制不能满足要求吗?

标签: javascript ajax


【解决方案1】:

要达到要求,您可以使用设置了--allow-file-access-from-files 标志的 Chromium 或 Chrome 浏览器。

fetch() 不允许请求具有file: 协议的本地文件,尽管XMLHttpRequest() 允许。 fetch() 确实允许请求 data URLBlob URL

对于

一些javascript文件,它接受这些参数“name”并返回 它是大写的,比如“VIM”

Worker可以用来获取本地文件的内容,对内容进行操作,然后可以调用postMessage()与主线程通信。

例如

worker.js

onmessage = e => {
  // do stuff
  let url = new URL(e.data);
  let [[,param]] = [...url.searchParams]; // get query string parameter `'vim'`
  let request = new XMLHttpRequest();
  request.open('GET', 'file:///path/to/local/file' /* e.data */);
  request.onload = e => {
    console.log(request.responseText); // `setTimeout()` can be inside `load` handler
  }
  request.send();
  // asynchronous response
  setTimeout(() => {
    // set `data URL` that `fetch()` will request
    postMessage(`data:text/plain,${param.toUpperCase()}`);
  }, Math.floor(Math.random() * 2000));
}

consolescript

const localRequest = async(url) => {
  const request = await fetch(await new Promise(resolve => {
    const worker = new Worker('worker.js');
    worker.onmessage = e => {
      resolve(e.data);
      worker.terminate();
    }
    worker.postMessage(url);
  }));
  const response = await request.text();
  console.log(response);
}

localRequest('file:///verse.txt?name=vim');

【讨论】:

  • 我需要彻底解决这个问题......但请务必从我身边鞠躬,探索这个主题并提供解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多