zoukankan      html  css  js  c++  java
  • 软件开发框架Ajax两种实现方法对比

      从问题入手

    快速开发平台

    我们先来看一个问题,实际项目研发的时候报的一个错误,如下图,后台Request获取前端上传的image图片,红色箭头处获取的的值为Null,所以pictureFileLoad.FileName就报错,也获取不到图片信息,这是怎么回事儿呢?

    软件开发框架ajaxsubmit

    定位解决

    我们查看前端传送代码,代码如下:

       $.post('@Url.Action("Save")', { objectstring: JSON.stringify(params) }, function (data) {
    		if (data.Status) {
    			$('#Id').val(data.Id);
    			layer.close(index);
    			ShowNotice(data.Message, "info");
    		}
    		else {
    			layer.close(index);
    			ShowNotice(data.Message, "danger");
    		}
    	}, "json");

     上述代码中用jquery的post方法异步传输,该方法是一个纯ajax传输方法,通过json格式传输数据,该种方法是纯ajax json数据提交,并不是form表单提交,所以在后台用reques获取表单值是获取不到的,那怎么办呢?

    <">解决:查了相关资料,jquery提供了JavaScript脚本专门解决form表单提交的问题,它就是ajaxform, 这就好办,更改下前端代码,全前端代码如下:
    	<form enctype="multipart/form-data" id="main-form" method="post">
    		//form表单及其组成...
    	</form>
    
            $("#btn_save").bind("click", function () {
                var params = $("#main-form").serializeJSON();
                var workexpList = $('#workexpstb').bootstrapTable('getData');
                params.WorkExpList = workexpList;
                var eductaionexpList = $('#eductaionexpstb').bootstrapTable('getData');
                params.EductaionExpList = eductaionexpList;
                layer.confirm('@this.Intl("Common.SaveConfirm.Message").ToString()', { btn: ['确认', '取消'] }, function () {
                    layer.close(layer.index);
                    for (var x = 0; x < workexpList.length; x++) {
                        if (workexpList[x].CName === null || workexpList[x].CName === "" || workexpList[x].StartDate === null || workexpList[x].StartDate === "") {
                            ShowNotice("工作经历有明细项不能为空,请输入完全!", "danger");
                            return;
                        }
                    }
                    var index = layer.msg('@this.Intl("Field:Common.Dealing.Message").ToString()', {
                        icon: 16,
                        time: false,
                        shade: 0.2
                    });
                    $('#main-form').data('bootstrapValidator').validate();
                    if ($('#main-form').data('bootstrapValidator').isValid()) {
                        $("#main-form").ajaxSubmit({
                            data: { "objectstring": JSON.stringify(params) },
                            url: '@Url.Action("Save")',
                            success: function (data) {
                                if (data.Status) {
                                    $('#Id').val(data.Id);
                                    layer.close(index);
                                }
                                else {
                                    layer.close(index);
                                    ShowNotice(data.message, "danger");
                                }
                            }
                        });
                   }
                    else {
                        layer.close(index);
                    }
                }, function () { })
            });
        }

    结语

    如果后台需要使用rquest方式获取前端值,则需要用ajaxform提交数据,如图两种提交方式对比:

    软件开发框架两种ajax方式

    贴上后台接收action代码:

    		[HttpPost]
            public ActionResult Save(string objectstring)
            {
                bool status = false;
                string message = this.Intl("Common.Message.SaveSuccessfully");
                try
                {
                    var resumemain = JsonConvert.DeserializeObject<ResumeMain>(objectstring);
    				.....
    				
    		}

    本站文章除注明转载外,均为本站原创或翻译,欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,共创和谐网络环境。
    转载请注明:文章转载自:软件开发框架 » 软件开发框架Ajax两种实现方法对比
    本文标题:软件开发框架Ajax两种实现方法对比

  • 相关阅读:
    Hdu 2564 单词缩写(字符串输入流的使用)
    Hdu2824 快速求欧拉函数和
    hdu 1787 欧拉函数模板
    Hdu2558(欧拉函数)
    hdu 1175连连看 (bfs带方向变化次数)
    pandas 使用总结
    APScheduler 定时任务使用总结
    watchdog 监控文件变化使用总结
    js 鼠标特效
    js 生成雪花间隔
  • 原文地址:https://www.cnblogs.com/frfwef/p/14575935.html
Copyright © 2011-2022 走看看