为什么send经常被称为
xhr.send(null)
Run Code Online (Sandbox Code Playgroud)
代替
xhr.send()
Run Code Online (Sandbox Code Playgroud)
?
W3,MDN和MSDN都声明它是可选的.此外,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;
Run Code Online (Sandbox Code Playgroud)
这种做法send(null)至少可以追溯到2005年的Google地图,但是在缩小范围之后,没有任何解释:
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)
}
Run Code Online (Sandbox Code Playgroud)
bfu*_*oco 14
如果你会在XMLHttpRequest的一个旧规范看一看,好像仿佛W3C并没有要求该参数是可选的,在一个点上,这可能导致人们提供一个明确的空值"以防万一".
(搜索'应该支持发送') http://web.archive.org/web/20060409155734/http://www.w3.org/TR/XMLHttpRequest/
我遇到的另一个可能的原因来自俄语页面的翻译,可在此查看:长谷歌翻译链接(搜索'GET-Version for Version without ActiveX')
当您发送没有ActiveX的版本的GET请求时,您必须指定null,否则您不能指定任何参数.如果GET始终指定为null,则不会失败:
我不知道这是否属实,但似乎有理由认为,如果GET参数包含在正文中,那么如果数据值是"未定义",则可能尚未生成正文.
不幸的是,我无法在搜索中找到任何更具说服力的内容.