首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >IE11 XMLHttpRequest未从服务器接收完整数据

IE11 XMLHttpRequest未从服务器接收完整数据
EN

Stack Overflow用户
提问于 2019-03-31 23:36:47
回答 1查看 599关注 0票数 0

我目前正在开发一个web应用程序,我遇到了一个奇怪的问题。我用XMLHttpRequest从谷歌浏览器和火狐浏览器向我的flask应用程序发送的请求可以正常工作,但在IE11和可能更老的版本中,看起来IE在数据完全传输之前就关闭了连接。我像这样发送post请求:

代码语言:javascript
复制
function getData() {
    var req = new XMLHttpRequest();
    req.open("POST", "http://"+window.host+"/text", true);
    req.responseType = "json";
    req.addEventListener("readystatechange", function(e){
        if (e.target.readyState == 4 && e.target.status == 200){
            display(e.target.response.data);
        }
    });
    req.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
    req.send(JSON.stringify({"text": "some text"}));
}

并像这样从flask应用程序接收:

代码语言:javascript
复制
@app.route('/text', methods=["POST"])
def data():
    if request.is_json:
        if "text" in request.get_json():
            for i in request.get_json()["text"]:
                if not re.search(textIntegrity, i):
                    return jsonify({"status": "Unrecognized characters: {}.".format(i)})
                    break
            data = reData(request.get_json()["text"])
            return jsonify({"status": 200, "data": data})
        else:
            return jsonify({"status": "Key 'text' not found."})
    else:
        return jsonify({"status": "Request type is not in json format."})

在mozilla和firefox中,我获得了完整的数据,XMLHttpRequest对象声明响应类型为json:Mozilla Response,但在IE中没有响应类型,如果响应类型太长,响应就会被截断:IE Response

我不知道是flask的问题还是IE处理请求的方式,也许我需要在flask项目中添加一些头文件,但我不知道。

EN

回答 1

Stack Overflow用户

发布于 2019-04-01 02:16:22

最后,我稍微修改了服务器端代码和客户端代码,让服务器以字符串的形式发送json数据,并在客户端解析它。

代码语言:javascript
复制
function getData() {
    var req = new XMLHttpRequest();
    req.open("POST", "http://"+window.host+"/text", true);
    req.addEventListener("readystatechange", function(e){
        if (e.target.readyState == 4 && e.target.status == 200){
            display(JSON.parse(e.target.response));
        }
    });
    req.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
    req.send(JSON.stringify({"text": "some text"}));
}
代码语言:javascript
复制
@app.route('/text', methods=["POST"])
def data():
    if request.is_json:
        if "text" in request.get_json():
            for i in request.get_json()["text"]:
                if not re.search(textIntegrity, i):
                    return jsonify({"status": "Unrecognized characters: {}.".format(i)})
                    break
            data = reData(request.get_json()["text"])
            return json.dumps(data);
        else:
            return json.dumps({"status": "Key 'text' not found."})
    else:
        return json.dumps({"status": "Request type is not in json format."})

也许这只是一个关于flask jsonify的问题,flask处理响应的方式或者IE处理请求的方式,我不知道,我有机会编辑服务器,所以我采用了这种方式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55442528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档