首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一种使用“unload\navigator.sendBeacon”+“GraphQL”将数据发送到服务器的方法?

是否有一种使用“unload\navigator.sendBeacon”+“GraphQL”将数据发送到服务器的方法?
EN

Stack Overflow用户
提问于 2018-03-21 19:20:25
回答 1查看 1.9K关注 0票数 2

在选项卡\浏览器关闭时,我需要将数据发送到服务器。我发现了这个答案 (基于这个博客),它建议使用sendBeacon这里将向您展示如何准备数据,以便通过Ajax将数据发送到服务器。我重复了答案中的结构:

代码语言:javascript
复制
window.addEventListener('unload', this.sendDataToServer, false)

sendDataToServer () {
    myData = JSON.stringify({
    'mutation': `mutation EmailAuth($email: String!, $password: String!) {
        getOrCreateUser(email: $email, password: $password) {
        token
        }
    }
    `,
    'variables': {email: 'test@test.net', password: 'Test'}
    })

    navigator.sendBeacon('http://localhost:8000/graphql', myData)
}

在本例中,Django显示:"POST /graphql HTTP/1.1" 400 53

我还在网上找到了Blob的版本。

代码语言:javascript
复制
window.addEventListener('unload', this.sendDataToServer, false)

sendDataToServer () {
    let headers = {
        type: 'application/json'
    }
    let myBlob = new Blob([JSON.stringify({
        'mutation': `mutation EmailAuth($email: String!, $password: String!) {
            getOrCreateUser(email: $email, password: $password) {
            token
            }
        }
        `,
        'variables': {email: 'test@test.net', password: 'Test'}
    })], headers)

    navigator.sendBeacon('http://localhost:8000/graphql', myBlob)
}

但在这种情况下,却完全没有Django的反应。

如何将数据包装在前端的GraphQL格式中,并以服务器端可以接受的方式放在sendBeacon中呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-22 00:19:41

在使用按钮而不是Blob的帮助下,找到了为什么unload不能工作的原因。问题在于chrome浏览器。控制台显示:Uncaught DOMException: Failed to execute 'sendBeacon' on 'Navigator': sendBeacon() with a Blob whose type is not any of the CORS-safelisted values for the Content-Type request header is disabled temporarily. See http://crbug.com/490015 for details.

Django正在等待application/json类型的请求,根据从错误链接,这是不安全的。

对于Firefox,可以使用Django的包corsheaders修复这个问题,并将CORS_ALLOW_CREDENTIALS = True添加到设置中。

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

https://stackoverflow.com/questions/49414923

复制
相关文章

相似问题

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