ajax与html 表格交互,Flask使用ajax进行前后端交互

ajax前后端交互的使用已经非常普及了, 这种数据交互方式比表单提交数据带给用户的使用体验更好一些。同时,利用ajax交互时数据传输一般使用json,我们可以很方便的管理我们所需要的数据。只需要定义好数据格式,可以前后端分离开发。

我们这里改一下之前图片上传的代码,使用ajax方式上传图片。

html表单:

Js代码:

function ajaxForm(){

var form= new FormData(document.getElementById("test_form"));

$.ajax({

url:"{{ url_for('api_upload') }}",

type:"post",

data:form,

dataType: 'json',

processData:false,

contentType:false,

success:function(data){

$(img_url_new).attr("src",data.img_url_new);

$(imgPic).attr("src",data.img_url_new);

},

error:function(e){

alert("error");

}

})

}

注意,需要引入jquery。

data为获取的表单数据,以json格式通过post方法传入后台,成功后从后台获取数据data,失败则弹出error。

后台接收代码:

@app.route('/up_photo', methods=['POST'], strict_slashes=False)

def api_upload():

file_dir = os.path.join(basedir, app.config['UPLOAD_FOLDER'])

if not os.path.exists(file_dir):

os.makedirs(file_dir)

f = request.files['photo']

if f and allowed_file(f.filename):

fname = secure_filename(f.filename)

ext = fname.rsplit('.', 1)[1]

new_filename = Pic_str().create_uuid() + '.' + ext

print new_filename

f.save(os.path.join(file_dir, new_filename))

img_url = ip+'show/'+new_filename

img_url_new = ip+'show/'+new_filename #处理后的图片,假数据

return jsonify({"success": 200, "msg": "上传成功", "img_url": img_url, "img_url_new": img_url_new})

else:

return jsonify({"error": 1001, "msg": "上传失败"})

通过上传图片的小例子我们大概了解了Flask使用ajax交互的基本方式,下面通过一个更加符合ajax使用场景的例子来加深理解它。

如,有这样一个场景,我们希望鼠标点击图片时将点击坐标传入后台,这时就必须使用ajax来实现了。

html页面代码:

点击选择裁剪坐标

1.jpg')%20%7D%7D

X: Y:

×

js代码:

function mousePosition(ev){

if(ev.pageX || ev.pageY){

return {x:ev.pageX, y:ev.pageY};

}

return {

x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,

y:ev.clientY + document.body.scrollTop - document.body.clientTop

};

}

function mouseMove(ev){

ev = ev || window.event;

var mousePos = mousePosition(ev);

document.getElementById('xxx').value = mousePos.x;

document.getElementById('yyy').value = mousePos.y;

}

document.onmousemove = mouseMove;

function Show(el){

var x = parseInt(document.getElementById('xxx').value)-el.offsetLeft;

var y = parseInt(document.getElementById('yyy').value)-el.offsetTop;

var data= {

data: JSON.stringify({

'x': x,

'y': y

}),

}

$.ajax({

url:"{{ url_for('img_operate') }}",

type:"post",

data:data,

dataType: 'json',

success:function(data){

//成功后的一些操作

},

error:function(e){

alert("error");

}

})

}

注意,我们这里通过json格式将数据传入后台:

var data= {

data: JSON.stringify({

'x': x,

'y': y

}),

}

那么后台如何接收x、y轴坐标呢?

data = json.loads(request.form.get('data'))

x = data['x']

y = data['y']

以上为接收ajax前台传入数据的方法,后台路由方法完整代码:

# 坐标操作图片处理的按钮路由

@app.route('/img_operate', methods=['POST'])

def img_operate():

data = json.loads(request.form.get('data'))

x = data['x']

y = data['y']

print(x)

print(y)

img = 'http://localhost:5000/static/img/1.jpg'

return jsonify({"success": 200, "img": img, "x": x, "y": y})

以上这些介绍了ajax前后台交互的基本方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我可以为您提供一个简单的示例。假设您正在使用jQuery库进行开发,并且您想要通过Ajax进行GET请求,并使用JSON格式进行前后端交互。 前端代码示例: ```javascript $.ajax({ url: 'your_backend_url', type: 'GET', dataType: 'json', success: function(data) { // 处理从后端返回的JSON数据 // 在这里可以使用返回的数据进行操作 }, error: function(xhr, status, error) { // 处理请求失败的情况 console.log(error); } }); ``` 在上面的示例中,您需要将 `'your_backend_url'` 替换为您的后端URL地址。该示例会向后端发送GET请求,并期望返回的数据类型为JSON。 后端代码示例(假设使用Python和Flask框架): ```python from flask import Flask, jsonify app = Flask(__name__) @app.route('/your_backend_url', methods=['GET']) def your_backend_function(): # 在这里编写处理GET请求的后端逻辑 # 可以查询数据库或执行其他操作 # 构造要返回的JSON数据 data = { 'message': 'Hello, world!', 'status': 'success' } # 将JSON数据作为响应返回 return jsonify(data) if __name__ == '__main__': app.run() ``` 在上面的示例中,`your_backend_function` 是处理GET请求的后端函数。您可以在此处编写逻辑来查询数据库或执行其他操作。然后,将您想要返回的数据构造为一个字典,并使用 `jsonify` 函数将其转换为JSON格式。 请注意,这只是一个简单的示例,可以根据您的具体需求进行扩展和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值