javascript - 如何使用 JavaScript Fetch 发布到 Rails 应用程序
问题描述
我正在构建一个需要发布到 Rails 应用程序的 Chrome 扩展程序。
我可以使用 Fetch 发送请求,但是当 Rails 处理请求时 JSON 对象不正确。我的控制器返回错误:
NoMethodError (undefined method permit' for #<String:0x00007ff83b5a36e8>)
日志说数据对象如下所示:
{"highlight"=>"{\"text\":\"hello world!\",\"url\":\"helloworld.com\"}"}
数据对象应如下所示:
{"highlight"=>{"text"=>"hello world!", "url"=>"helloworld.com"}}
出于某种原因,Rails 将请求处理为带有引号的字符串,而不是散列。我不知道如何从 Fetch 传递它,这样它就不会那样做。
这是 JavaScript 代码:
function captureHighlight(selection, tab) {
const highlight = {
text: selection.selectionText,
url: selection.pageUrl
}
return highlight;
}
async function postHighlight(highlight) {
let formData = new FormData();
formData.append('highlight', JSON.stringify(highlight));
const response = await fetch('http://localhost:3000/highlights', {
method: 'POST',
body: formData,
});
console.log(response);
}
解决方案
导轨.xhr?方法检查X-Requested-With
标头是否包含该XMLHttpRequest
值。只需将其设置在标题中,如下所示:
const response = await fetch('http://localhost:3000/highlights', {
method: 'POST',
body: formData,
headers: {
'X-Requested-With': 'XMLHttpRequest'
},
});
Rails 将检测请求xhr
并以适当的格式返回响应。
推荐阅读
- rx-java2 - 具有 Vertx 和 RxJava2 导入的 Quarkus 产生 NoClassDefFoundError
- javascript - 拉取大型 JSON 字符串
- c++ - C++20 概念中“相等”的概念
- c - 测量矩阵乘法参数的程序错误
- reactjs - React App with Jest - Jest 遇到了一个意外的令牌
- typescript - 在 TypeScript 中,如何根据函数参数之一的返回类型创建函数的返回类型?
- laravel-5 - 当具有角色 X 的用户登录时显示 CompanyX 的已记录工单
- ios - UIDocumentPickerMode.exportToService 不工作
- php - 如何使用自动增量更新字段 CONCAT?
- selenium - Selenium:Opera 需要基于 Chromium 70 到 73 之间的版本