$ .ajax没有绝对文件系统路径的请求有效负载

时间:2018-07-12 15:56:19

标签: javascript jquery ajax electron

注意:我在下面的扰流器中解释这些奇怪的网址。

Electron@2.0.4
jquery@3.3.1

当我尝试使用$ .ajax到Electron jquery内部的绝对路径时,似乎摆脱了我的有效负载。我使用以下内容:

    $.ajax({
      url: "/test/anything?func=ajax",
      method: "POST",
      processData: false,
      contentType: "application/json",
      data: JSON.stringify({foo: "bar"}),
    });

    fetch("/test/anything?func=fetch", {
      method: "POST",
      mode: "cors",
      body: JSON.stringify({foo: "bar"})
    });

他们提出以下要求:

ajax

fetch

如您所见,ajax调用在提取时没有有效负载。有谁知道解决此问题的方法,或者是否有这种行为的原因?


对于奇怪的URL,我使用服务工作者将以/test开头的URL转发到http://localhost,如下图所示正常工作。 Localhost仅用于测试,我在docker上运行了httpbin的本地副本。

我这样做是为了将Web应用程序移植到电子版,因此除了index.html更改和添加sw.js之外,代码库可以相同。

sw

1 个答案:

答案 0 :(得分:0)

多亏了Rory的评论,我找到了解决方案。我安装了express,并将firstprivate文件添加到项目根目录,内容如下:

express.js

使用this gist,我在const express = require('express') const app = express() app.use(express.static('.')) app.listen(3000) 文件的各个位置添加了以下内容:

main.js

服务工作者仍然收到请求,并将const express = require('./express.js'); //< function createWindow () { mainWindow.loadURL('http://localhost:3000/index.html'); //< } 替换为http://localhost:3000/test

ajax:
ajax

服务人员:
sw

服务工作者还发送OPTIONS请求,以确保允许跨域,而提取请求则不允许。这似乎是因为ajax请求具有X-Requested-With标头,而提取则没有。