Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
跨源Flask服务器的Javascript错误_Javascript_Python_Flask_Fetch - Fatal编程技术网

跨源Flask服务器的Javascript错误

跨源Flask服务器的Javascript错误,javascript,python,flask,fetch,Javascript,Python,Flask,Fetch,我对CORS和使用Flask和Javascript的请求有问题。我在域上有一个API:5000/endpoint,在domain.com上有一个前端 我最初有一个CORS错误,我安装了flask CORS,这已经停止了CORS错误 当我通过Postman向Python服务器发送请求时,它返回正确的响应。但是,我在Javascript中的fetch请求失败,当我查看chrome控制台时,没有从请求中抛出错误,但是响应的解析抛出TypeError:cannotread undefined的属性'js

我对CORS和使用Flask和Javascript的请求有问题。我在域上有一个API:5000/endpoint,在domain.com上有一个前端

我最初有一个CORS错误,我安装了flask CORS,这已经停止了CORS错误

当我通过Postman向Python服务器发送请求时,它返回正确的响应。但是,我在Javascript中的fetch请求失败,当我查看chrome控制台时,没有从请求中抛出错误,但是响应的解析抛出
TypeError:cannotread undefined的属性'json'。我想这和CORS有关

如何让Javascript获取访问响应的主体

Python

app = Flask(__name__)
CORS(app)

@app.route('/endpoint', methods=['POST'])
@cross_origin()
def endpoint():
    if request.method == 'POST':
        data = request.get_json()
        code = myFunc(data)
        return json.dumps(code)

if __name__ == '__main__':
    app.run(host="0.0.0.0")
Javascript

fetch(addr, {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: projectJson
            })
                .then(
                    response => response.json(),

                    error => console.log('An error occurred.', error)
                )
                .then(
                    parsedJSON => {
                        lastJson = parsedJSON;
                        window.parent.postMessage(JSON.stringify(parsedJSON), '*');
                    }
                )
这里有一个例子

Javascript

fetch('http://127.0.0.1:5000/endpoint', {
方法:“POST”,
模式:“cors”,
标题:{
“内容类型”:“应用程序/json”,
},
body:JSON.stringify({'data':'data'}),
})
.then(response=>response.json())
。然后(数据=>{
console.log('Success:',data);
})
.catch((错误)=>{
console.error('error:',error);
})
蟒蛇

app = Flask(__name__)
CORS(app)

@app.route('/endpoint', methods=['POST'])
@cross_origin()
def endpoint():
    if request.method == 'POST':
        data = request.get_json()
        code = myFunc(data)
        return json.dumps(code)
更多信息

笔记
  • 编写API时常见的响应格式是JSON。使用Flask编写这样的API很容易。如果从视图返回dict,它将转换为JSON响应

  • 您需要处理
    中的错误。catch

  • axios lib可能比fetch api更强大

  • 等等,
    。然后(r=>r.json(),e=>console.log(e))
    不是您处理
    Promise
    s的方式。如果要捕获
    错误
    ,请在末尾使用
    捕获
    处理程序。另外,这听起来不像是一个
    CORS
    问题-听起来你没有正确处理响应。