【问题标题】:POST Request (Javascript)POST 请求 (Javascript)
【发布时间】:2010-10-16 02:03:27
【问题描述】:

如何在不使用表单且不回发的情况下用 Javascript 发出简单的 POST 请求?

【问题讨论】:

标签: javascript html post


【解决方案1】:

虽然我从@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);

【讨论】:

  • 如此简单,我喜欢它:D
【解决方案2】:

您可以使用 AJAX 调用(XMLHttpRequest 对象)来做到这一点

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

【讨论】:

  • 我想如果他想使用 AJAX,他会使用的。在我的回答中,我提出了一个帖子请求没有AJAX,也没有打开页面、弹出或刷新页面:)。
【解决方案3】:

我制作了一个不刷新页面、不打开页面和不使用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/

【讨论】:

  • 编辑:似乎有人想出了如何制作一个不会引发潜在 XSS 攻击标志的工作版本。 jsfiddle.net/b87pzbye/37
猜你喜欢
  • 2016-10-18
  • 2013-10-07
  • 2016-03-24
  • 1970-01-01
  • 2018-06-16
  • 2015-02-25
  • 1970-01-01
  • 1970-01-01
  • 2020-10-28
相关资源
最近更新 更多