瞎扯淡 关于 js 页面中对提交按钮进行处理,然后再将数据提交到后台

lionzixuanyuan · 2012年12月14日 · 最后由 lionzixuanyuan 回复于 2012年12月17日 · 13001 次阅读

前台经验不足,现在碰到一个在我看来比较棘手的问题,请大家帮忙看看,指导指导。 首先我来描述下我要实现的功能。 在一个表单的创建页面,当数据都填写完成后,点击提交按钮。 在 js 文件中根据所填信息,运用 ajax 到后台进行处理,后台处理完后会返回一个实际策略和一个优惠策略,通过 json 数据传到前台。 然后在 ajax 成功获取 json 数据后弹出 confirm 让用户选择确定或取消。 当用户点击确定后,则将经过后台处理的优惠策略数据填入创建页面的隐藏 input 框中,如果点击取消,则将实际策略填入创建页面隐藏的 input 框中。 最后执行提交动作,将创建页面的信息提交至后台进行保存。 所有这些操作都是绑定在提交按钮的 click 事件上。 js 文件中主要处理的代码如下:

$("#get").click(function(){
   getSum();
   form.submit();  
  });
function getSum(){
    var book_id = $("#purchase_order_book_id").val();
    var num =$("#purchase_order_before_num").val();
    $.ajax({
    type: "post",
    url: "/purchase_orders/get_sum",
    dataType : "json",
    data: { "num" : num,
            "book_id" : book_id},
    success: function(json){
        var discrepancy = eval(json.commend_num) - eval(num);
        if(eval(discrepancy) > 0){
            if(eval(json.commend_sum) < eval(json.before_sum)){
                if(confirm("?")){            
                    $("#purchase_order_num").val(json.commend_num);
                    $("#purchase_order_before_num").val(json.commend_num);
                    $("#purchase_order_price").val(json.commend_price);
                    $("#purchase_order_before_sum").val(json.commend_sum);
                    $("#purchase_order_sum").val(json.commend_sum);
                }
                else{
                    $("#purchase_order_num").val(num);
                    $("#purchase_order_price").val(json.before_price);
                    $("#purchase_order_before_sum").val(json.before_sum);
                    $("#purchase_order_sum").val(json.before_sum);
                }
            }else{
                $("#purchase_order_num").val(num);
                $("#purchase_order_price").val(json.before_price);
                $("#purchase_order_before_sum").val(json.before_sum);
                $("#purchase_order_sum").val(json.before_sum);
            }
          }
        }
    });
}

看不懂:-),顶一下,高手指点一下吧。看上去这么复杂,为何不引用一些 js 框架来提高点效率。

为啥这里要用到 eval?parseInt(num, 10) 就够了。

有全局的 confirm 函数可供调用的,用法像这样:

if (confirm('选择优惠策略')) {
    // 处理优惠策略
}
else {
    // 处理用户自己的
}

然后,因为你这里点了提交之后需要 $.ajax,所以上面的判断应该放在 $.ajax 的回调里面做,类似:

getSum(function() {
    form.submit()
})

function getSum(fn) {
    $.ajax({
        success: function(data) {
            // handle data
            fn()
        }
    })
}

#2 楼 @dotnil 我其实不是专业做前台这块的,这些代码也是看着现成的代码自己堆起来的,你给我的建议我一会去试一下,先谢谢你 等我试完了给你反馈

#1 楼 @virgil 多谢帮顶啊,看着复杂,其实逻辑很简单

#2 楼 @dotnil 尝试了一下,问题没有解决,估计要换个实现方式

需要 登录 后方可回复, 如果你还没有账号请 注册新账号