当前位置: 首页 > 知识库问答 >
问题:

未发送Ajax的标题(通过electron webview)

全鸿晖
2023-03-14

我已经尝试了我在这里找到的解决头问题的方法,例如,在发送之前检查ajax的版本。我基本上有一个电子应用程序,里面有一个webview,这个webview与一个ipc脚本通信,这个ipc脚本将jQuery添加到访问的页面,然后它执行一个ajax请求。我使用Vue作为前端。

问题是,它没有发送我提出的定制请求。尽管如此,它以前是100%有效的。我真的不记得是什么引起的。

my electron应用程序的主index.js

mainWindow = new BrowserWindow({
height: 850,
useContentSize: true,
width: 1550,
webPreferences: {

  webSecurity: false,
  nodeIntegration: true,
  webviewTag: true
}
})

webview

<webview :id="webview.key" :src="webview.url" :preload="fullpath + `\\serverBrowserIPC.js`" style="height: 100%" pcontextIsolation></webview>

ipc.js文件

 const {
   ipcRenderer
 } = require('electron');
 const _ = require("lodash")
 const myajaxfile = require("./myajaxfile.js")

 window.onload = function() {
   var script = document.createElement("script");
   script.src = "https://code.jquery.com/jquery-3.5.1.min.js";
   script.onload = script.onreadystatechange = function() {
   };
   document.body.appendChild(script);

   // var script2 = document.createElement("script");
   // script2.src = "https://cdnjs.cloudflare.com/ajax/libs/axios/0.19.2/axios.min.js";
   // script2.onload = script2.onreadystatechange = function() {
   // };
   // document.body.appendChild(script2);
 };

 ipcRenderer.on("get_item", function(event, payload) {
   myajaxfile.sendRequest()
 });

myajaxfile.jsajax部分(基本模板):

    let stream_ajax = $.ajax({
    method: "GET",
    url: `https://example.com/ajaxCenter?_action=getserver}`,
    headers: {
      "Access-Control-Allow-Origin": "true",
      'accept': '*/*',
      'X-Requested-With': 'XMLHttpRequest',
      'x-csrf-token': csrf_token
    },
    complete(response, status) {
      if (status === "success") {
        
      } else {
        
      }
    }
  });

没有发送任何标题。以前,它100%运行良好,没有任何问题。任何帮助都是非常感谢的,这个问题正在停止我的整个项目。

我上传了一个项目的样本,可以在这里下载。使用npm install安装软件包,然后npm run watch运行electron应用程序。运行后,请单击按钮connect,并检查控制台中的网络选项卡。

只有在头中发送了csrf令牌时,项目中提供的请求才起作用,否则会导致重定向。以前,它的工作没有任何问题。


共有3个答案

司寇阳朔
2023-03-14

客户端(electron)没有问题,CORS(跨源资源共享)需要在服务器端配置。Access Control Allow Origin头应该由服务器发送,而不是由客户端(您的Ajax调用)发送。您必须在服务器中配置CORS以启用跨源请求,否则Axios、jQueryAjax等客户端将无法工作。请向服务器管理员或应用程序开发人员咨询。这是我的工作

当服务器响应Access Control Allow Origin:*时,这意味着任何域都可以访问该资源。您还可以通过在调用实际endpoint之前将HTTP OPTIONS方法发送到服务器来选择飞行前请求方法。这是MDN文档供您参考。

扈运浩
2023-03-14

非常奇怪,这是通过jquery在ajax调用中发送头的方式。

你真的确定你的问题吗?如果是,问题可能在其他地方,而不是在报告的代码中。

一旦这样说,您就可以删除两个自定义头:X-request-With它默认由jquery和访问控制允许源代码以值XMLHttpRequest发送,因为协议希望在服务器响应中找到它(而不是在客户端请求中)。

徐隐水
2023-03-14

由于您发送的是自定义标题,因此这由CORS管理,将分两步进行。这里的另一个答案最好地说明了这一点。

我看到的最大问题是,您试图发送服务器Access Control Allow Origin,而这是响应中应该来自服务器的头。我会再次检查您连接的服务器是否配置了CORS。您还可以尝试记录错误消息。由$.ajax返回的jqxhr有很多方法可以获取状态文本。这将有助于缩小通话失败的确切范围。

 类似资料:
  • 问题内容: 我有一个内置的javascript,它可以执行以下操作:通过ajax-> php-> sql获取内容,并在单击内容后在index.php上显示它,将显示新内容。 现在,我想拥有一个在将内容单击到php之后发送数据的函数,该函数将在db中执行某些操作。如何创建将发送数据的功能?谢谢! 这是我的显示内容的代码: }); }` 问题答案: 您可以通过在jQuery.ajax 设置中包含值,将

  • 问题内容: 好的,我已经看到有关此问题的大量问题,但实际上没有一个答案对我有用,这是我的AJAX: var“ jsonFilters”包含一个包含以下数据的数组: 这是我的控制器: jsonFilters始终为null …我也尝试过添加到AJAX调用中…但是那实际上并没有做任何事情 最后,该类的结构如下: 关于我可能会丢失或正在发生的事情有什么想法吗? 到目前为止我尝试过的事情: 使用JSON.s

  • 所以我试图通过ajax将图像作为一个blob发送。blob的类型正确,大小约为4.5 kb。我试着这样发送: 接收页面看起来像这样: 它告诉我找不到索引“图像”。所以不仅数据没有发送,甚至索引也被省略了。我做错了什么? 编辑: toBlob和toDataURL都不会产生任何东西,只是一个空的PNG。有没有办法将数据从帧缓冲区转换成Base64编码的jpg或png?

  • 问题内容: 我想使用JavaScript中的方法发送一些变量和一个字符串。 我从数据库中获取字符串,然后将其发送到PHP页面。我正在使用一个对象。 问题在于该字符串多次包含该字符,PHP中的数组将其视为多个键。 我试着更换与与功能,但它似乎并没有做任何事情。 有人可以帮忙吗? javascript代码和字符串如下所示: 字符串是: 问题答案: 您可以使用encodeURIComponent()。

  • 问题内容: 编辑:整个问题原来是网络问题,但是如果您看到有关如何优化流程的任何想法,我仍然会感激不尽。 我对Servlets还是很陌生,在不久的将来,我遇到了一个与性能有关的问题。我正在尝试通过Google Chrome浏览器中的XHR对象发送视频文件。视频文件存储在Blob对象中。我在JavaScript脚本中使用了此功能: 它运行良好,因为Blob到达Servlet,在这里我使用以下代码对其进

  • 问题内容: 我的Web服务器托管在具有基本身份验证的Apache Tomcat 7中。我有Tomcat用户“ tomcat”,角色为“ tomcat”,密码为“ tomcat”。以下分别是我在客户端的web.xml文件和脚本片段。 Web.xml 客户端脚本: 我很确定Web服务和基本身份验证没有问题。但是从客户端脚本中,没有发送身份验证标头。我也尝试过 但是请求发送时没有身份验证头。任何帮助将不