【问题标题】:Why do we pass null to XMLHttpRequest.send?为什么我们将 null 传递给 XMLHttpRequest.send?
【发布时间】:2021-06-02 15:06:07
【问题描述】:

为什么send 经常被称为

xhr.send(null)

而不是

xhr.send()

?

W3MDNMSDN 都声明它是可选的。此外,ActiveX 控件doesn't seem to need the argument

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 in 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)
}

【问题讨论】:

  • 只是明确表示在请求标头之后没有任何内容发送到服务器。
  • 人们可以做while (i),为什么还要做while (i &gt; 0)?这只是一种风格。
  • @PaulS ...因为i 可能是负数?
  • 您是否尝试过谷歌搜索如何发出 Ajax 请求,每个示例都有 .send(null) 并且我猜旧习惯很难改掉,可能适合这句口头禅“如果不是就不要修复它” t坏了”
  • @DaveMackintosh 我做到了,但似乎null 从来没有必要

标签: javascript ajax


【解决方案1】:

如果您看一下 XMLHttpRequest 的旧规范,似乎 W3C 并没有要求参数在某一时刻是可选的,这可能导致人们提供一个显式的 null 值'just in案例”。

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

我遇到的另一个可能的原因来自俄语页面的翻译,可在此处查看:long Google Translate link(搜索“GET-Request for Version without ActiveX”)

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

我不知道这是否属实,但如果 GET 参数包含在正文中,如果数据值为“未定义”,则可能不会生成正文,这似乎是合理的。

很遗憾,我无法在搜索中找到更确凿的信息。

【讨论】:

  • 禁止访问俄语页面 xhtml.co.il/ru/jQuery/Типы/XMLHttpRequest
  • 用回路机器链接更新了 URL。
【解决方案2】:

不添加 null 会在旧版本的 Firefox 中引发异常。

此行为以early as 2002 存在,并以through Firefox 3 (2008) 存在。

【讨论】:

    【解决方案3】:

    因此,如果您的 HTTP 请求方法是 GET,那么 HTTP 客户端只需将数据附加到请求 URL(称为query string)即可将数据发送到服务器,这意味着请求的正文将是empty,这就是为什么您需要将该参数的值设置为null

    但是,如果你的HTTP请求方式是POST,那么你的请求数据会被放入请求体中,最终通过send函数发送到服务器。

    干杯!

    【讨论】:

      【解决方案4】:

      XMLHttpRequest.send() 方法发送请求。如果请求是异步的(这是默认设置),则此方法会在请求发送后立即返回。如果请求是同步的,则此方法在响应到达之前不会返回。 send() 接受请求正文的可选参数。如果请求方法是 GET 或 HEAD,则忽略该参数并将请求正文设置为 null。

      【讨论】:

      • 请添加指向您复制上述文本的文档的链接,并使用引用格式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-14
      • 1970-01-01
      • 2020-03-12
      • 1970-01-01
      • 2022-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多