2009-03-28 3 views
15

Как вы делаете простой запрос POST в Javascript без использования форм и без отправки?Запрос POST (Javascript)

+0

Возможно, было бы лучше дать более подробную информацию? – spender

+1

это дубликат – bendewey

+0

это слишком расплывчато, и вы можете начать с запроса google –

ответ

3

Вы можете сделать это с помощью AJAX вызовов (объект XMLHttpRequest)

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

+0

Я думаю, что если бы он хотел использовать AJAX, он бы использовал. В моем ответе я сделал почтовый запрос ** без 'AJAX' ** и не открывал страницу, не всплывал или не обновлял страницу :). –

13

Хотя я беру пример кода из @sundeep ответа, но разместить код здесь для полноты

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

Так просто, мне это нравится: D –

5

Я сделал функцию, которая отправляет запрос без обновления страницы, без открытия страницы и без AJAX. Прогресс невидим для пользователя. Я использую фальшивое IFRAME, чтобы послать запрос:

/** 
* 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); 
} 

Теперь вы можете это сделать:

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

Посмотрите, как работает !: http://jsfiddle.net/b87pzbye/10/.

+0

EDIT: кажется, кто-то понял, как создать рабочую версию, которая не создает потенциальный флаг атаки XSS. http://jsfiddle.net/b87pzbye/37/ –