2009-03-28 21 views
15

¿Cómo se hace una simple solicitud POST en Javascript sin usar formularios y sin publicar de nuevo?POST Request (Javascript)

+0

quizás sería mejor dar más detalles? – spender

+1

esto es un duplicado – bendewey

+0

esto es demasiado vago, y usted podría comenzar a través de la consulta de google –

Respuesta

3

Usted puede hacer esto mediante llamadas AJAX (objeto XMLHttpRequest)

http://www.openjs.com/articles/ajax_xmlhttp_using_post.php

+0

Creo que si quisiera usar AJAX lo hubiera usado. En mi respuesta he hecho una solicitud posterior ** sin 'AJAX' ** y sin abrir una página, ventana emergente o actualizar la página :). –

13

Aunque estoy tomando el ejemplo de código de respuesta @sundeep, pero publicar el código aquí para completar

var url = "sample-url.php"; 
var params = "lorem=ipsum&name=alpha"; 
var xhr = new XMLHttpRequest(); 
xhr.open("POST", url, true); 

//Send the proper header information along with the request 
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 

xhr.send(params); 
+0

Tan simple, me encanta: D –

5

He hecho una función que envía una solicitud sin actualizar la página, sin abrir una página y sin AJAX. El proceso es invisible para el usuario. Yo uso un falso marco flotante para enviar una petición:

/** 
* Make a request without ajax and without refresh the page 
* Invisible for the user 
* @param url string 
* @param params object 
* @param method string get or post 
**/ 
function requestWithoutAjax(url, params, method){ 

    params = params || {}; 
    method = method || "post"; 

    // function to remove the iframe 
    var removeIframe = function(iframe){ 
     iframe.parentElement.removeChild(iframe); 
    }; 

    // make a iframe... 
    var iframe = document.createElement('iframe'); 
    iframe.style.display = 'none'; 

    iframe.onload = function(){ 
     var iframeDoc = this.contentWindow.document; 

     // Make a invisible form 
     var form = iframeDoc.createElement('form'); 
     form.method = method; 
     form.action = url; 
     iframeDoc.body.appendChild(form); 

     // pass the parameters 
     for(var name in params){ 
      var input = iframeDoc.createElement('input'); 
      input.type = 'hidden'; 
      input.name = name; 
      input.value = params[name]; 
      form.appendChild(input); 
     } 

     form.submit(); 
     // remove the iframe 
     setTimeout(function(){ 
      removeIframe(iframe); 
     }, 500); 
    }; 

    document.body.appendChild(iframe); 
} 

Ahora usted puede hacerlo:

requestWithoutAjax('url/to', { id: 2, price: 2.5, lastname: 'Gamez'}); 

ver cómo funciona !: http://jsfiddle.net/b87pzbye/10/.

+0

EDITAR: parece que alguien descubrió cómo hacer una versión funcional que no genere una posible bandera de ataque XSS. http://jsfiddle.net/b87pzbye/37/ –