![](/img/trans.png)
[英]JavaScript: Shall I pass null into XMLHttpRequest.send()?
[英]Why do we pass null to XMLHttpRequest.send?
為什么send
經常被稱為
xhr.send(null)
代替
xhr.send()
?
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;
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)
}
如果您看一下 XMLHttpRequest 的舊規范,似乎 W3C 似乎並不要求該參數在某一點是可選的,這可能導致人們“以防萬一”提供顯式空值。
(搜索“應該支持發送”) http://web.archive.org/web/20060409155734/http://www.w3.org/TR/XMLHttpRequest/
我遇到的另一個可能的原因來自俄語頁面的翻譯,可在此處查看: 長谷歌翻譯鏈接(搜索“GET-Request for Version without ActiveX”)
當你發送一個沒有 ActiveX 的版本的 GET 請求時,你必須指定 null,否則你不能指定任何參數。 如果始終將 GET 指定為 null,則不會失敗:
我不知道這是否屬實,但如果 GET 參數包含在正文中,那么如果數據值為“未定義”,則正文可能不會生成,這似乎是合理的。
不幸的是,我在搜索中找不到任何更確定的信息。
不添加null
會在舊版本的 Firefox 中引發異常。
這種行為早在 2002 年就存在,並且通過 Firefox 3 (2008) 存在。
因此,如果您的 HTTP 請求方法是GET ,那么 HTTP 客戶端只需將數據附加到請求 URL(作為所謂的查詢字符串)就可以將數據發送到服務器,這意味着請求的正文將是空的,這就是為什么需要將該參數的值設置為null
。
但是,如果您的 HTTP 請求方法是POST ,那么您的請求數據將被放入請求正文中,最終將通過send
函數發送到服務器。
干杯!
XMLHttpRequest.send() 方法發送請求。 如果請求是異步的(這是默認值),則該方法會在請求發送后立即返回。 如果請求是同步的,則此方法在響應到達之前不會返回。 send() 接受請求正文的可選參數。 如果請求方法是 GET 或 HEAD,則忽略該參數並將請求正文設置為 null。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.