小编典典

为什么我们将null传递给XMLHttpRequest.send?

ajax

为什么send经常被称为

xhr.send(null)

代替

xhr.send()

W3MDNMSDN都声明它是可选的。此外,ActiveX控件似乎不需要参数

hr=pIXMLHTTPRequest.CreateInstance("Msxml2.XMLHTTP.6.0");
SUCCEEDED(hr) ? 0 : throw hr;

hr=pIXMLHTTPRequest->open("GET", "http://localhost/books.xml ", false);
SUCCEEDED(hr) ? 0 : throw hr;

hr=pIXMLHTTPRequest->send(); // <-- this line
SUCCEEDED(hr) ? 0 : throw hr;

这种做法send(null)至少可以追溯到2005年的Google
Maps中
,但被缩小了,没有任何解释:

Y.asynchronousTransform = function (qc, vb, kc, Nc, Ba) {
    if (m.type == 3) return;
    var cc = Y.getCached(kc);
    if (cc) {
        cc.transformToHTML(qc, vb);
        if (Nc) Nc();
        return
    }
    var yc = qa.create(Ba);
    var sa = Xd.create();
    nd('<a href="' + kc.xmlEscape() + '">' + kc.xmlEscape() + "</a>", 0);
    sa.open("GET", kc, true);
    sa.onreadystatechange = function () {
        if (sa.readyState == 4) {
            if (yc.isValid()) {
                try {
                    var Db = sa.responseXML;
                    var cc = Y.create(Db);
                    Y.cache(kc, cc);
                    cc.transformToHTML(qc, vb);
                    if (Nc) Nc()
                } catch (b) {}
            }
        }
    };
    sa.send(null)
}

阅读 364

收藏
2020-07-26

共1个答案

小编典典

如果您看一下XMLHttpRequest的旧规范,似乎W3C似乎并不需要在某一点上将该参数设为可选,这可能导致人们提供了一个明确的null值,以防万一。

(搜索“应支持发送”)
http://web.archive.org/web/20060409155734/http://www.w3.org/TR/XMLHttpRequest/

我遇到的另一个可能的原因来自俄语页面的翻译,可在此处查看:较长的Google
Translate链接
(搜索“没有ActiveX的GET请求版本”)

当发送不带ActiveX的版本的GET请求时,必须指定null,否则不能指定任何参数。如果始终将GET指定为null,则不会失败:

我不知道这是否成立,但如果主体中包含GET参数,则似乎是合理的,如果数据值“未定义”,则可能未生成主体。

不幸的是,我无法在搜索中找到更具决定性的内容。

2020-07-26