使用form表單提交請求如何獲取后台返回的數據?


原文

 

問題描述

  • 一般的form表單提交是單向的:只能給服務器發送數據,但是無法獲取服務器返回的數據,也就是無法讀取HTTP應答包。
  • 想要真正的半雙工通訊一般需要使用Ajax, 但是Ajax對文件傳輸也很麻煩。

解決方法

方法一:

jQuery封裝了一個form表單提交有回調功能的方法

導入
jquery
jquery-form.js

如下: 一個上傳文件的form

<form id="form1" action="/shop/updateUserinfo" enctype="multipart/form-data" method="post">
        <table>
            <tr>
                <td>請選擇頭像:</td>
                <td><input type="file" name="image"/></td>
            </tr>
            <tr>
                <td><input type="submit" name="submit" value="提交"/></td>
                <td><input type="reset" name="reset" value="重置"/></td>
            </tr>
        </table>
</form>

js實現

// $(function ())是文檔document加載完自動調用的函數
$(function () {
    /*
     獲取form元素,調用其ajaxForm(...)方法
     內部的function(data)的data就是后台返回的數據
    */
    $("#form1").ajaxForm(function (data) {
            console.log(data);
            console.log("str:" + JSON.stringify(data));
        }
    );
});

請求的url在form的action中定義,獲取到的后台數據是JSON格式$(function ())不套在外面,里面的這個請求函數沒法自啟動后台代碼無差異

方法二:

使用ajax來發送請求提交表單

前端頁面:

<form id="userInfo" >
        <div class="weui-cell">
            <div class="weui-cell__hd"><label class="weui-label">姓名</label></div>
            <div class="weui-cell__bd">
                <input class="weui-input" id="username" name="username" type="text" pattern="[0-9]*" placeholder="請輸入姓名">
            </div>
        </div>
        <div class="weui-cell ">
            <div class="weui-cell__hd">
                <label class="weui-label">年齡</label>
            </div>
            <div class="weui-cell__bd">
                <input class="weui-input" id="age" name="age" type="number" placeholder="請輸入年齡">
            </div>
        </div>
        <div class="weui-cell ">
            <div class="weui-cell__hd">
                <label class="weui-label">地址</label>
            </div>
            <div class="weui-cell__bd">
                <input class="weui-input" id="address" name="address" type="text" placeholder="請輸入地址">
            </div>
        </div>
        <div class="weui-btn-area">
            <a class="weui-btn weui-btn_primary" href="javascript:" id="saveUserInfo">確定</a>
        </div>
</form>

ajax請求發送數據

$("#saveUserInfo").click(function() {
        var formObject = {};
        var formArray =$("#userInfo").serializeArray();
        $.each(formArray,function(i,item){
            formObject[item.name] = item.value;
        });
        $.ajax({
            url:"user/addUser",
            type:"post",
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify(formObject),
            dataType: "json",
            success:function(data){
                alert(data.msg);
            },
            error:function(e){
                alert("錯誤!!");
            }
        });
});

注意

如果僅僅粗糙的使用ajax的話,那就是 $("#submit").ajax(…), 很顯然里面的發給后台的數據data很難傳輸文件。最初,ajax出於安全性考慮,不能對文件進行操作,所以就不能通過ajax來實現文件上傳。 

參考

Form表單提交,Ajax請求,$http請求的區別

Form表單獲取后台返回數據

form表單ajax提交json數據

什么是單工、半雙工和雙工通信(最詳細)

單工,半雙工和全雙工有何區別和聯系?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM