首页 > 解决方案 > $.ajax 没有绝对文件系统路径的请求负载

问题描述

注意:我在下面的剧透中解释了奇怪的网址。

电子
@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 有。有谁知道解决这个问题的方法,或者这种行为是否有原因?


至于奇怪的 URL,我使用 service worker 来转发以/testto开头的 url,http://localhost如下图所示正常工作。localhost 仅用于测试,我在docker上运行了 httpbin 的本地副本。

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

软件

标签: javascriptjqueryajaxelectron

解决方案


感谢 Rory 上面的评论,我找到了解决方案。我安装了 express 并将一个express.js文件添加到项目根目录,内容如下:

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/testhttp://localhost

阿贾克斯:
阿贾克斯

服务人员:
软件

Service Worker 还发送一个 OPTIONS 请求以确保允许跨域,而 fetch 的请求则不允许。这似乎是因为 ajax 请求具有 X-Requested-With 标头,而 fetch 没有。


推荐阅读