Подтвердить что ты не робот

Почему мы передаем null в 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, но, если ее минимизировать, нет объяснений:

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)
}
4b9b3361

Ответ 1

Если вы посмотрите на старую спецификацию XMLHttpRequest, похоже, что W3C не требовал, чтобы этот параметр был необязательным в какой-то момент, что, возможно, привело к тому, что люди, указав явное значение null, просто случай".

(поиск "СЛЕДУЕТ поддерживать отправку" ) http://web.archive.org/web/20060409155734/http://www.w3.org/TR/XMLHttpRequest/

Еще одна правдоподобная причина, по которой я столкнулся, - это перевод русской страницы, которую можно увидеть здесь: длинная ссылка Google Translate (поиск "GET-Request for Version" без ActiveX ')

Когда вы отправляете GET-запрос для версии без ActiveX, вы должны указать null, иначе вы не можете указать какие-либо параметры. Не будет ошибкой, если GET всегда указывается null:

Я понятия не имею, верно это или нет, но кажется правдоподобным, что если бы параметры GET были включены в тело, тело могло быть не сгенерировано, если значение данных было "undefined".

К сожалению, мне не удалось найти что-то более убедительное в моем поиске.

Ответ 3

Если ваш запрос HTTP GET, то вы указываете свои данные запроса в URL-адресе запроса. Вот почему вы должны поместить null в send, так как вы ничего не отправляете в тело HTTP-запроса.

Но если вы используете запрос HTTP POST, тогда все ваши данные запроса должны быть помещены в тело запроса, которое выполняется с помощью метода отправки.

Ответ 4

Метод XMLHttpRequest.send() отправляет запрос. Если запрос является асинхронным (по умолчанию), этот метод возвращает, как только запрос отправляется. Если запрос является синхронным, этот метод не возвращается, пока не поступит ответ. send() принимает необязательный аргумент для тела запроса. Если метод запроса GET или HEAD, аргумент игнорируется, а тело запроса имеет значение null.