Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

341
Views
Cómo pasar FormData sobre XMLHttpRequest usando el método GET

Cuando el Método del senderform de envío es POST, todo funciona bien. Sin embargo, tan pronto como cambio el método a GET, no recibo nada en el servidor.

 function ajaxSubmit(destinationElement, senderform) { var xmlreq = new XMLHttpRequest(); var params = new FormData(senderform); xmlreq.open(senderform.method, senderform.action, true); if (/\/content\.php$/.test(senderform.action)) xmlreq.onreadystatechange = receiveTable; else xmlreq.onreadystatechange = receiveText; xmlreq.send(params); }

Sé que podría agregar manualmente pares clave-valor al final de la dirección de la acción, pero el problema es que no sé qué formulario se pasará con qué campos.

Preferiría javaScript nativo si es posible.

¿Cómo puedo enviar una solicitud GET usando XMLHttpRequest con pares clave-valor de senderform que apunta a formar Elemento (de la misma manera que ya funciona para las solicitudes POST)?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Al final llegué con esta solución, que carga todos los pares clave-valor de la referencia del formulario de senderform .

 function ajaxSubmit(destinationElement, senderform) { var xmlreq = new XMLHttpRequest(); var params = new FormData(senderform); if (senderform.method == 'get') { var firstRun = true; for (var key of params.keys()) { if (firstRun) { senderform.action += '?'; firstRun = false; } else senderform.action += '&'; senderform.action += key + "=" + params.get(key); } } xmlreq.open(senderform.method, senderform.action, true); if (senderform.action.indexOf('content.php')!==-1) xmlreq.onreadystatechange = receiveTable; else xmlreq.onreadystatechange = receiveText; xmlreq.send(params); }

En combinación con la respuesta de @tanc y este artículo , pude resolver mi problema.

over 4 years ago · Santiago Trujillo Report

0

¿Estás seguro de que el problema no es el script PHP? No veo ninguna referencia de que https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#send() con FormData necesita POST para funcionar, pero si el script PHP toma la información de $POST o algo así (Mi PHP está oxidado), el comportamiento sería diferente.

over 4 years ago · Santiago Trujillo Report

0

Dado que no puede crear un cuerpo utilizable en una solicitud GET (consulte a continuación), la otra opción es usar parámetros en la URL.

 function buildGetUrlParams(baseUrl, paramsObj) { var builtUrl = baseUrl + "?"; Object.keys(paramsObj).forEach(function(key) { builtUrl += key + "=" + paramsObj[key] + "&"; }); return builtUrl.substr(0, builtUrl.length - 1); } document.getElementById('finalUrl').innerText = buildGetUrlParams('http://test.url.com', { name:'James', occupation:'web design' });
 <div id="finalUrl"></div>

Una solicitud HTTP GET puede contener un cuerpo, pero ese cuerpo no tiene un significado semántico . Lo que significa, en términos simples, que un servidor no tiene ningún motivo ni conocimiento de cómo procesar el cuerpo de una solicitud GET. Si es posible escribir un servidor que pueda hacer esto, sería una mala práctica según las especificaciones de HTTP/1.1 :

si el método de solicitud no incluye una semántica definida para un cuerpo de entidad, entonces el cuerpo del mensaje DEBERÍA ignorarse al manejar la solicitud.

Y básicamente por eso no funciona. Si desea enviar cualquier tipo de datos a los que el servidor pueda responder, deberá utilizar un método HTTP diferente.

Esta respuesta también explica este problema.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!