【问题标题】:Can you use other formats beside XML with XMLHttpRequest?您可以通过 XMLHttpRequest 使用除 XML 之外的其他格式吗?
【发布时间】:2011-03-15 20:52:44
【问题描述】:

我知道在 Javascript 中可以使用 JSON 代替 XMLHttpRequest,但是我可以发出请求并获取完全任意的数据吗?

喜欢自定义文本或二进制格式?

还是接口仅限于 JSON 和 XML?

我希望我能解决我在这里的疑惑......

a) 如何创建没有 XML 或 JSON 的普通请求?

b) 如何以纯字符串而非对象的形式访问结果(答案)?

【问题讨论】:

    标签: javascript json xml-serialization


    【解决方案1】:

    您可以将结果返回为

    • 使用 responseXML 属性的 DOM 文档(如果接收到 XML),或者
    • 使用 responseText 属性的字符串(无论格式如何)

    如果是 JSON,某些浏览器也可以将其作为对象返回。

    以字符串形式返回任何内容的能力允许您自己解析任何格式。

    【讨论】:

    • 如何告诉它我想要的是一个字符串?您的答案实际上是迄今为止最好的答案,但其他关于该请求的答案也很有趣。我不知道我也应该问这个问题。 :-)
    • 不读取 responseXML 属性,而是读取 responseText 属性。详细在这里:developer.mozilla.org/en/xmlhttprequest
    【解决方案2】:

    您可以使用任何基于文本的格式:XML、JSON、CSV,或者只是text/plain

    我不确定如果您尝试使用二进制格式会发生什么。

    【讨论】:

    • 我相信它应该能够解释浏览器可以解码的任何字符编码,并以 Javascript 自己的 Unicode 编码返回。
    • 要以跨浏览器的方式使用 XMLHttpRequest 下载二进制数据,请参阅此答案。 stackoverflow.com/questions/1095102/…
    【解决方案3】:

    除了提到setRequestHeader 方法的帖子之外:似乎xmlhttprequest API 的w3 规范仅对header(即第一个参数)施加(建议)限制,而不是对@987654325 @(即第二个参数)。

    这是规范的链接:http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader-method

    AFAIC,这意味着就所请求的传输而言,任何数据类型都是有效的。但是,这不会扩展到返回的数据,因为仅指定了文本和 xml。

    我可能错了。

    【讨论】:

      【解决方案4】:

      是的,只需设置内容类型:

      var request = new XMLHttpRequest();
      request.setRequestHeader("Content-Type", "text/plain;charset=UTF-8"); // whatever character set you need.
      request.open("GET", "yourtext.txt", true);
      request.onreadystatechange = function() {
       if(this.readyState == 2) {
        alert(request.responseText);
       }
      }
      request.send();
      

      【讨论】:

      • 我如何将结果作为纯字符串而不是对象返回?
      • 阅读了关于 responseText 的 thomasrutters 回答才明白你的意思,但谢谢! :-) 我不习惯 Javascript。 onreadystatechange 对我来说并不明显。
      【解决方案5】:

      您可以在 send() 之前将内容类型显式设置为纯文本:

      var request = new XMLHttpRequest();
      request.open("POST", "/test.php");
      request.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
      request.send(message);
      

      【讨论】:

        猜你喜欢
        • 2022-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-01
        • 2017-05-09
        • 1970-01-01
        • 2016-02-28
        • 1970-01-01
        相关资源
        最近更新 更多