Probé las soluciones que encontré aquí para el problema de los encabezados, por ejemplo, antes de beforeSend y verificar la versión de ajax. Básicamente tengo una aplicación electron , dentro hay una webview , esta webview se comunica con un script ipc , este script ipc agrega jquery a la página visitada, luego ejecuta una solicitud ajax . Estoy usando Vue para el front-end.
El problema es que no envía las solicitudes personalizadas que estoy poniendo. Aunque antes funcionaba al 100%. Realmente no recuerdo qué lo causó.
El index.js principal de mi aplicación electrónica.
mainWindow = new BrowserWindow({ height: 850, useContentSize: true, width: 1550, webPreferences: { webSecurity: false, nodeIntegration: true, webviewTag: true } }) La webview
<webview :id="webview.key" :src="webview.url" :preload="fullpath + `\\serverBrowserIPC.js`" style="height: 100%" pcontextIsolation></webview> el archivo 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() }); la parte myajaxfile.js ajax (plantilla básica):
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 { } } });No se envía nada de los encabezados. Antes funcionaba al 100% sin problemas. Cualquier ayuda es realmente apreciada, este problema está deteniendo todo mi proyecto.
He subido una muestra del proyecto, que se puede descargar aquí . instale los paquetes con npm install y luego npm run watch para ejecutar la aplicación electron . Después de ejecutarlo, haga clic en el botón connect y verifique la pestaña de red en la consola.
La solicitud proporcionada en el proyecto solo funciona si el csrf-token se envió en los encabezados; de lo contrario, provocaría una redirección. Anteriormente, solía funcionar sin ningún problema.
Dado que está enviando encabezados personalizados, esto se rige por CORS y sucederá en dos pasos. Se ilustra mejor en otra respuesta de StackOverflow aquí .
El mayor problema que veo es que está intentando enviar el servidor Access-Control-Allow-Origin cuando ese es un encabezado que debería provenir del servidor en la respuesta. Verificaría dos veces que el servidor al que se está conectando esté configurado para CORS. También puede intentar registrar sus mensajes de error. El jqxhr devuelto por $.ajax tiene bastantes formas de llegar al texto de estado. Debería ayudar a reducir exactamente dónde está fallando su llamada.
Realmente extraño, esa es la forma de enviar encabezados en llamadas ajax a través de jquery.
¿Estás realmente seguro de tu problema? En caso afirmativo, el problema probablemente esté en otro lugar, no en el código informado.
Una vez dicho eso, podría eliminar dos de sus encabezados personalizados: X-Requested-With se envía de manera predeterminada con el valor XMLHttpRequest de jquery y Access-Control-Allow-Origin , ya que el protocolo espera encontrarlo en la respuesta del servidor (no en el cliente). solicitud).
No hay nada malo en su lado del cliente (electrón), el CORS (intercambio de recursos de origen cruzado) debe configurarse en su lado del servidor. Se supone que el servidor envía el encabezado Access-Control-Allow-Origin , no el cliente (su llamada Ajax). Debe tener CORS configurado en su servidor para habilitar la solicitud de origen cruzado; de lo contrario, los clientes como Axios, jquery ajax no funcionarán. Pregúntele al administrador de su servidor o al desarrollador de la aplicación. Aquí está ho es trabajo
cuando el servidor responde con Access-Control-Allow-Origin: *, lo que significa que cualquier dominio puede acceder al recurso. También puede optar por el enfoque de solicitud previa al vuelo, enviando el método HTTP OPTIONS al servidor antes de llamar al punto final real. Aquí están los documentos de MDN para su referencia.