javascript - $.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 来转发以/test
to开头的 url,http://localhost
如下图所示正常工作。localhost 仅用于测试,我在docker上运行了 httpbin 的本地副本。
我这样做是为了将 Web 应用程序移植到电子,因此代码库可以相同,除了 index.html 更改和添加 sw.js。
解决方案
感谢 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/test
为http://localhost
Service Worker 还发送一个 OPTIONS 请求以确保允许跨域,而 fetch 的请求则不允许。这似乎是因为 ajax 请求具有 X-Requested-With 标头,而 fetch 没有。
推荐阅读
- node.js - 如何将结果分成几条消息?
- javascript - 如何从json数组中获取值
- mongodb - 从嵌套数组中分页嵌入对象
- facebook - Facebook 移交协议:“页面收件箱”不可用作辅助接收方
- django-rest-framework - 当显式调用序列化程序时,是否真的需要指定序列化程序类?
- libusb - 为什么在运行 Python 2 而不是 Python 3 时使用 LibUSB 会给出“无后端错误”?
- json - 获取整个 Google 表格工作表的 JSON 定义
- ios - 无法更改使用 xib 文件 Swift 创建的按钮中的字体
- c++ - 使用 Qt 对 vtable 的未定义引用
- python - Python 名称“服务器”未定义