博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ajax与Flask传值的跨域问题
阅读量:6496 次
发布时间:2019-06-24

本文共 3172 字,大约阅读时间需要 10 分钟。

前后端分离时,关于前端Ajax-Post数据时,遇到的一个问题

在写一个报名提交的页面,前端组写了前端页面

但是没有写后端的传值,本来想构建Flask结构目录
但是想实现API的形式,可以控制提交时间段-在不招新的时间关闭后端
就打算分离开,form表单提交的Post一开始是这样写的

$("form").submit(function(){    var flagname  = isname();    var flagphone = isphone();    var flagclass = isclass();    var flagemail = isemail();    var flaggroup = isgroup();    if(flagname == true && flagphone == true && flagclass == true         && flagemail == true && flaggroup == true){        var data={            InfoNmae:InfoName.value,            InfoPho:InfoPho.value,            InfoCls:InfoCls.value,            InfoEmail:InfoEmail.value,            InfoGroup:arr,            InfoPower:InfoPower.value        };        $.ajax({            type:'POST',            url: "/joinus",            data: JSON.stringify(data),            dataType : 'json',            success:function(res){                alert("提交成功");            },            error: function (res){                var json_data=JSON.stringify(res);                alert(json_data);                // alert("现在不迎新哦~");            },        });    }    else {        return false;    }})

后端是这样

@app.route("/joinus",methods=['POST'])def index():    data=request.get_json(force=True)    if data:        print(data)        return jsonify({"status":True})    else:        return jsonify({"status":False})

一开始想的是,直接将url改为后端运行的绝对路径不行了

但是修改之后发现,但是一直报500错误,后来才知道是跨域问题......

在网上找到了

第一种直接修改数据类型为jsonp,采用GET方法,确实可行.....

$.ajax({            type:'POST',            url: "http://127.0.0.1:5000/joinus",            data: JSON.stringify(data),            dataType : 'jsonp',            success:function(res){                alert("提交成功");            },            error: function (res){                var json_data=JSON.stringify(res);                alert(json_data);                // alert("现在不迎新哦~");            },        });

第二种就是在flask端加上响应头

但是上个链接中在用make_reponse()函数形成响应头时没有将数据json化
还是报500错误

@app.route("/api",methods=['POST'])def index():    data=request.get_json(force=True)    if data:        print(data)        res = make_response(jsonify(data))        res.headers['Access-Control-Allow-Origin'] = '*'        res.headers['Access-Control-Allow-Methods'] = 'POST'        res.headers['Access-Control-Allow-Headers'] = 'x-requested-with,content-type'        return res    else:        return jsonify({"error":False})

第三种是应用了flask集成的轮子

直接pip install flask_cors

from flask_cors import CORS# r'/*' 是通配符,让本服务器所有的 URL 都允许跨域请求CORS(app, resources=r'/*')@app.route("/joinus",methods=['GET','POST'])def index():    data=request.get_json(force=True)    if data:        print(data)        return jsonify({"status": True})    else:        return jsonify({"status": False})
$.ajax({            type:'POST',            crossDomain: true,            url: "http://127.0.0.1:5000/joinus",            data: JSON.stringify(data),            dataType : 'json',            success:function(res){                alert("提交成功");            },            error: function (res){                var json_data=JSON.stringify(res);                alert(json_data);                // alert("现在不迎新哦~");            },        });

感觉第三种方便点,第二种也不错

转载于:https://www.cnblogs.com/bay1/p/10982211.html

你可能感兴趣的文章
人际心理学
查看>>
系统设计与架构笔记:ETL工具开发和设计的建议
查看>>
Android UI Button 和GridView 的设计--优化(2)
查看>>
Android之解析Android Map地图返回的Json数据
查看>>
超大磁盘分区工具parted使用介绍(一)
查看>>
数据还原到指定时间点的处理示例
查看>>
/usr/local/lib/libz.a: could not read symbols: Bad value(64 位 Linux)
查看>>
convertView&setTag方法的一点理解
查看>>
SSAS使用时间智能解决本年累计、同比、环比【转载】
查看>>
SQL Server-流程控制 5,Goto 语句
查看>>
使用Qt编写模块化插件式应用程序
查看>>
[转]大三下,我们该做什么?一篇被转万次的日志,你值得一看
查看>>
print_r() 'ThinkPHP\Common\common.php 601
查看>>
关于empty函数的判断
查看>>
分类和预测
查看>>
转 如何在IOS设备中去掉屏幕上的status bar
查看>>
批量实现面向对象的实例
查看>>
android 广播机制
查看>>
【生活随想】实习结束以及开始校园招聘
查看>>
UML部署图(转载)
查看>>