tampermonkey - 无法使用 GM_xmlhttpRequest 从 Tampermonkey 使用 POST 方法将数据发送到 Scalatra
问题描述
...它回答:500 服务器错误;java.lang.NoSuchMethodError: 'void org.scalatra.servlet.RichRequest.update(java.lang.Object, java.lang.Object)' at... at... at... ...
我的代码:
const ajaxobj =
{ method: "POST"
, url: url
, data: '{"q":"anyad"}' //JSON.stringify(adat)
, dataType: "json"
, headers: { "Content-Type": "application/json" }
, onload: (resp) => { console.log(resp); ... }
}
console.log(ajaxobj)
GM_xmlhttpRequest(ajaxobj)
在 console.log(ajaxobj) 的答案中,我看到:
data: Object { value: "{\"q\":\"anyad\"}" }
而不是字符串,它的“值”成员是字符串的对象。我认为这是 scalatra 不喜欢的,因为我可以从其他地方(Angular)向它发送一个字符串,它就像一个魅力。
现在有趣的是:
如果我不调用 GM_xmlhttpRequest 调用(注释掉),那么数据将是字符串,而不是对象。
解决方案
我找到了一个实用的解决方案(但它是如何工作的,为什么它很好,我无法理解背后的理论):伪造纯字符串(非 JSON)传输;从 ajax 对象中删除属性 dataType: "json" 和 headers: { "Content-Type": "application/json" }。
推荐阅读
- c# - 如何将本地文件路径转换为基于程序集的路径?
- reactjs - 无法定义未定义的属性
- javascript - 如何在 Visual Studio 代码控制台上打印 Javascript 代码?
- php - 获取所有数据(联系人号码)并使用 Itexmo API 发送短信
- regex - 正则表达式以 HH:MM:SS 格式从字符串中提取时间
- blazor - Blazor JSInterop 保存文件
- flutter - 使用提供程序的 Flutter Button 状态管理
- typescript - mui 自动完成是什么样的 html 元素?
- arrays - 这些 Javascript 代码片段是如何工作的?
- java - 如何在反应式编程中初始化一个空的 Mono Class 对象?