V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
suisetai
V2EX  ›  JavaScript

请问 为什么我获取的 responseText 值是空的啊

  •  
  •   suisetai · 2019-11-18 01:30:35 +08:00 · 4357 次点击
    这是一个创建于 1867 天前的主题,其中的信息可能已经有所发展或是发生改变。
    sendAjax( ){
    var xhr = new XMLHttpRequest();
    xhr.responseType = "text";
    xhr.open('GET', 'example.txt', true);
    alert(xhr.responseText);
    xhr.send(null);
    }

    example.txt 和 html 页面是同一个域的
    第 1 条附言  ·  2019-11-18 02:47:06 +08:00
    好像是我从本地加载文件的原因 用 http 协议 就可以了 。。
    XMLHttpRequest 用于同 HTTP 和 HTTPS 协议一起工作。
    理论上,它能够同 FTP 这样的其他协议一起工作,但比如请求方法和响应状态码等部分 API 是 HTTP 特有的。
    如果从本地文件中加载网页,那么该网页中的脚本将无法通过相对 URL 使用 XMLHttpRequest,因为这些 URL 将相对于 file://URL 而不是 http://URL。而同源策略通常会阻止使用绝对 http://URL。
    结果是当使用 XMLHttpRequest 时,为了测试它们通常必须把文件上传到 Web 服务器或者运行一个本地服务器。
    7 条回复    2019-11-18 08:45:22 +08:00
    lianyue
        1
    lianyue  
       2019-11-18 01:46:00 +08:00   ❤️ 1
    morethansean
        2
    morethansean  
       2019-11-18 01:55:32 +08:00
    @lianyue #1
    而且他连 send 都没 send 就开始读返回值了...
    lihongming
        3
    lihongming  
       2019-11-18 01:57:24 +08:00 via iPhone
    用 fetch...then 吧,比较容易理解
    suisetai
        4
    suisetai  
    OP
       2019-11-18 02:13:50 +08:00
    @lianyue
    我是按书上的例子
    function getNewContent(){
    var request=getHTTPObject();
    if(request){
    request.open("GET",'example.txt', true );
    request.onreadystatechange=function(){
    if(request.readyState == 4){
    alert('Response Received');
    var para = document.createElement('p');
    var txt = document.createTextNode(request.responseText);
    para.appendChild(txt);
    document.getElementById('new').appendChild(para);
    }
    };
    request.send(null);
    }
    else{
    alert('Sorry, your browser doesn\'t support XMLHttpRequest ');
    }
    alert('Function Done');
    }
    能正常弹出 Function Done 和 Response Received
    但是 responseText 的值总是 null。。。。
    js 萌新 见谅
    rabbbit
        5
    rabbbit  
       2019-11-18 02:20:21 +08:00   ❤️ 1
    给个栗子自己研究吧...
    var xml = new XMLHttpRequest()
    xml.open('GET', 'https://jsonplaceholder.typicode.com/todos/1')
    xml.onreadystatechange = function () {
    if (xml.readyState === 4) console.log(xml.responseText)
    }
    xml.send()
    suisetai
        6
    suisetai  
    OP
       2019-11-18 02:41:26 +08:00
    @rabbbit
    好像是我把文件放本地的原因 用 http 协议 就可以了 。。
    XMLHttpRequest 用于同 HTTP 和 HTTPS 协议一起工作。
    理论上,它能够同 FTP 这样的其他协议一起工作,但比如请求方法和响应状态码等部分 API 是 HTTP 特有的。
    如果从本地文件中加载网页,那么该网页中的脚本将无法通过相对 URL 使用 XMLHttpRequest,因为这些 URL 将相对于 file://URL 而不是 http://URL。而同源策略通常会阻止使用绝对 http://URL。
    结果是当使用 XMLHttpRequest 时,为了测试它们通常必须把文件上传到 Web 服务器或者运行一个本地服务器。
    sunziren
        7
    sunziren  
       2019-11-18 08:45:22 +08:00
    这是传说中的老式 Ajax?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2754 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:09 · PVG 18:09 · LAX 02:09 · JFK 05:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.