1. 程式人生 > >Flask使用ajax進行前後端互動

Flask使用ajax進行前後端互動

ajax前後端互動的使用已經非常普及了, 這種資料互動方式比表單提交資料帶給使用者的使用體驗更好一些。同時,利用ajax互動時資料傳輸一般使用json,我們可以很方便的管理我們所需要的資料。只需要定義好資料格式,可以前後端分離開發。我們這裡改一下之前圖片上傳的程式碼,使用ajax方式上傳圖片。

html表單:

<div style="width:100px;float:left;margin-left:35px;">
        <form method="post" enctype="multipart/form-data" id="test_form" style="margin-top:45px;">
             <a href="javascript:;" class="file button red">選擇照片
             <input type="file" name="photo" id="photo">
              </a>
             <a type="button" class="file button red" id="tj" onclick="ajaxForm()">上傳照片</a>
             <a class="file button red" data-reveal-id="myModal">手動裁剪</a>
        </form>
 </div>

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頁面程式碼:
<div id="myModal" class="reveal-modal">
            <h1>點選選擇裁剪座標</h1>
            <div class="uploader blue">
                <img id="imgPic" src="{{ url_for('static', filename='img/1.jpg') }}" onclick="Show(this)" style="width:300px;height:270px;"/>
                X:<input id="xxx" type="text" style="width:30px;"/>  Y:<input id="yyy" type="text" style="width:30px;"/>
            </div>
            <a class="close-reveal-modal">×</a>
 </div>

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前後臺互動的基本方法。

相關推薦

Flask使用ajax進行前後互動

ajax前後端互動的使用已經非常普及了, 這種資料互動方式比表單提交資料帶給使用者的使用體驗更好一些。同時,利用ajax互動時資料傳輸一般使用json,我們可以很方便的管理我們所需要的資料。只需要定義好

layui進行分頁處理,後返回資料沒有count欄位,需要單獨獲取再新增到資料中,再進行項渲染,另有layui表格資料增刪改查前後互動

整體效果圖如下: (1)分頁前端介面處理 (2)分頁後端的資料處理 具體程式碼如下: 前端介面程式碼:包括分頁,增刪改查,重新整理(搜尋功能還沒做,後端是java程式碼) <!DOCTYPE html> <html> <hea

【Android】- 搭建伺服器進行前後互動

Web服務端和客戶端的互動,Okhttp請求的方式,包括get 和 post ,請求圖片,伺服器的搭建。 1.下載tomcat和Eclipse 找到相應的版本進行下載,並進行環境的搭配 2.下載struts框架,進行管理 找到最新版本進行下載: 3.Eclipse新

SSM框架用JSON進行前後數據傳輸

回調函數 fse 刷新 number 返回結果 itl 美化 label -o 一個根據用戶id查找用戶信息的簡單功能,使用JSON進行數據的傳輸 前端代碼 這裏用bootstrap做簡單的樣式美化,中間留了個div用來異步的顯示查詢結果,ajax進行前端的數據傳輸(c

php中使用ajax進行前後json數據交互

前端 array char 取數 方式 註冊界面 test 傳輸 created (最近在學習ajax,所以想自己總結一下在PHP中如何使用ajax技術!) 一、ajax註意點:   1、原理圖:(來自韓順平ajax視頻)          2、ajax返回數據類型

jsp前後互動以及請求轉發和請求包含

request物件 作用: 獲得請求引數: 請求方式: API: 獲得引數: 前後端互動 涉及到前後端互動的都很重要 getParameter(“name”); 能夠獲得前段頁面提交的引數: Returns the value of a request pa

基於Node.js的ajax前後互動的例子

前端程式碼: <!DOCTYPE html>   <html lang="en">      &

springboot+mybatis+thymeleaf專案搭建及前後互動

前言 spring boot簡化了spring的開發, 開發人員在開發過程中省去了大量的配置, 方便開發人員後期維護. 使用spring boot可以快速的開發出restful風格微服務架構. 本文將詳細的介紹如何搭建一套spring boot 專案, 實現前後端互動. 開發工具 : IDEA&nbs

一個原生的靜態html專案需要前後互動或測試的時候怎麼辦呢?(在本地開啟http服務)

我們做專案的時候有時用webpack ,glup,什麼的都會生成一個本地地址,但是原生的沒有,這時候當你需要前後端互動,或者測試說我們連你IP在你本地先測吧!這時候該怎麼辦呢,不可能臨時換成vue,或者其他的沒有必要。於是問了一下別人叫了我一個很使用的方法! 要像使用這個方法前提是你已經安裝了n

類Flask實現前後互動之程式碼聊天室

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

如何使用ajax實現多條刪除及前後互動

/*多條刪除,以下程式碼是本人在springCloud中寫的, 但是方法都大同小異,你看懂了,也就會了*/ JSP頁面如下: <%@ page language='java' pageEncoding='UTF-8'%> <%@tagli

Atitit 前後互動模式 目錄 1.1. Ajax 1 1.2. Fetch api 1 1.3. 服務指令碼模式(簡單快速) 1 1.4. 瀏覽器注入物件、函式 1 1.5. 瀏覽器外掛模式

Atitit 前後端互動模式   目錄 1.1. Ajax 1 1.2. Fetch api 1 1.3. 服務端指令碼模式(簡單快速) 1 1.4. 瀏覽器注入物件、函式 1 1.5. 瀏覽器外掛模式 1 1.6. other 1   &

BigDecimal/Long 前後互動失去精度解決方法

問題 發現一個詭異的現象,資料庫儲存的bigDecimal型別的資料,經過springboot返回給前端資料丟失了幾位小數,例如 222233334444.01134567(後端)>222233334444.01135(前端)。經過查資料,在Controller層通過@Resp

PHP 前後互動 獲取AUTHORIZATION認證

修改檔案:.htaccess 修改位置:入口檔案同級目錄 修改內容: Apache伺服器下,我們需要開啟rewrite_module模組 新增主要程式碼:HTTP_AUTHORIZATION 是你獲取 HTTP:Authorization 的 key 值 及:獲取方式 $

初識 vue —— 最簡單的前後互動示例

一、學習 vue 面臨的問題 最近想學一門前端技術防身,看到部落格園中寫 vue 的多,那就 vue 吧。都說 vue 的官方教程寫得好,所以我就從官方教程開始學習。官方教程說“Vue (讀音 /vjuː/,類似於 view) 是一套用於構建使用者介面的漸進式框架。與其它大型框架不同的是,Vue 被設計為可以

學習學習Spring,前後互動方式

最近在修煉程式碼,學習了SSM框架,學到了其中一個關鍵點就是前後臺如何互動的,首先要知道,Spring是如何在前端如何輸出內容的,就是通過 @Controller @RequestMapping("/viewContent") public class CollegeMan

教你搭一個簡單的前後互動小網站

最近想自己搭一個網站,但僅僅會前端還是有點做不到實際情況中的前後端互動,就自己瞎鼓搗了幾個工具,來搭一個簡單的網站。 工具:         後端處理這種自己做的小網站用 Node是最好不過來(其他語言不會。。),選Express跟Koa都可以,這邊我選的是Express

前後互動方式(同一頁面並行開發、變數傳遞)

剛做完一個專案的改進需求,總結一些專案心得,主要有兩方面: 同一個頁面,前後端各負責幾個模組開發,如何頁面整合? 前端如何從後端獲取資料? 1 前後端按模組開發同一頁面 首先,在這個專案中沒有用到vue、react這些框架,實現頁面的一種做法是前端通

原生JavaScript進行前後同構

什麼是前後端同構 明確三個概念:「後端渲染」指傳統的 ASP、Java 或 PHP 的渲染機制;「前端渲染」指使用 JS 來渲染頁面大部分內容,代表是現在流行的 SPA 單頁面應用;「同構渲染」指前後端共用 JS,首次渲染時使用 Node.js 來直出 HTML。一般來說同構渲染是介於前