php - 多個form一次保存?

查看:70
本文介绍了php - 多個form一次保存?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

我將數據用while撈出後,每筆數據都會有一個 form,例如form123
然後每一筆數據旁邊我都有個按鈕可以儲存該筆數據
但因為太多筆數據了,導致假設有五十筆數據,就要按五十次保存按鈕

$(".ing").click(function(e){
    var id = e.currentTarget.dataset.id;
$.ajax({
                type:'POST',
                url:'ing',
                data:$("#form"+id).serialize(),
                cache:false,
                success: function(){
                    
                }
            });
});

想問如何做一個一次保存每一筆數據的按鈕與ajax?


感謝各位,簡直太牛啦

解决方案

這裏有一個方法,但是風險比較高

// 對每一個 form 調用 ajax,並獲得 $.ajax 返回的 promise 對象
var promises = $("form").toArray()
    .map(function(form) {
        return $.ajax({
            type: "POST",
            url: "ing",
            data: $(form).serialize(),
            cache: false,
            success: function() {
            }
        });
    });

// 使用 jQuery.when() 來處理所有結果
// 注意:只有全部都成功調用才會有 done
$.when.apply($, promises).done(function() {
    var results = Array.prototype.slice.apply(arguments);
    // 這裏你可以處理每一個 form 的結果,其結果是有序的,
    // 順序為 $("form") 產生的數組的順序
});

如果想低風險實現的話,那就要自己寫點東西來處理每一個 ajax 的返回。

補充

下面我寫了一個 doAll() 來處理多個 Promise 的返回值,它也返回一個 promise(jQuery的),但只有 resolve 沒有 reject,所以最後只需要註冊 done 回調就好

function doAll(promises) {
    var d = $.Deferred();
    var results = Array(promises.length);
    promises.forEach(function (p, i) {
        p.done(function (data) { return results[i] = { success: true, data: data }; })
            .fail(function (data) { return results[i] = { success: false, data: data }; });
    });
    $.when.apply($, promises).always(function () {
        d.resolve(results);
    });
    return d.promise();
}

下面是一個試驗,隨機生成若幹數據(實驗中設置 n = 10),產生n個隨機數,模擬異步調用。隨機數是 timeout 時間,第偶個數的調用模擬成功,第奇數次調用模擬失敗

function mock(v, t) {
    console.log(`v = ${v}, t = ${t}`);
    const d = $.Deferred();
    setTimeout(() => {
        if (v % 2 === 0) {
            d.resolve(t);
        } else {
            d.reject(t);
        }
    }, t);
    return d.promise();
}

var n = 10;

const numbers = Array.from(Array(n), () => Math.floor(Math.random() * 900) + 100);
console.log(numbers);

doAll(numbers.map((n, i) => mock(i, n)))
    .done(results => console.log(results));

結果如下圖:

这篇关于php - 多個form一次保存?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆