请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师求帮忙!!!找了好多天都找不到原因!快崩溃了!!

前端提交表单内容后出现以下状况图片描述

用debug调试的话可以跳到后端,但是controller里的shopstr是null,而调用的HttpServletRequestUtil.getString里的result也是null,是什么原因呢。。ajax的原因吗。。求老师帮忙解答一下!!

js代码:
图片描述

ajax:
图片描述

后端controller:图片描述

HttpServletRequestUtil.getString方法:
图片描述

正在回答

插入代码

6回答

同学再试试这个,http://coding.imooc.com/learn/questiondetail/104060.html 不行的话明天再看,或者在群里先问问别的同学

0 回复 有任何疑惑可以回复我~
  • 提问者 HereIAm_ #1
    无果,,群还没同意申请。。哎 这个搞不定后面的课程就做不了了 好揪心啊
    回复 有任何疑惑可以回复我~ 2019-03-01 14:47:30
  • 提问者 HereIAm_ #2
    老师解决了!!是我之前在看到第四章最后一节的时候看到一半就跟着调试所以出现那个提交失败null,就是因为后面的那个文件上传解析器和相关jar包没导上去的原因 太蠢了 谢谢老师!!!
    回复 有任何疑惑可以回复我~ 2019-03-01 15:57:10
  • 翔仔 回复 提问者 HereIAm_ #3
    赞同学解决问题的能力:)
    回复 有任何疑惑可以回复我~ 2019-03-01 18:38:49
提问者 HereIAm_ 2019-03-01 00:07:37


https://img1.sycdn.imooc.com//szimg/5c78070d0001d7c912870606.jpg老师这个是我的spring-web.xml文件,重写了且对照了视频的代码几遍还是一样的问题。。。

0 回复 有任何疑惑可以回复我~
提问者 HereIAm_ 2019-02-28 23:40:18


https://img1.sycdn.imooc.com//szimg/5c7800c50001ba2913040399.jpgcontenType注释掉后

0 回复 有任何疑惑可以回复我~
  • 翔仔 #1
    把js里传入shopImg图片流的部分注释掉,也就是只保留shopStr传递给后台,看看后台能否接收到,修改后记得清空缓存
    回复 有任何疑惑可以回复我~ 2019-02-28 23:42:24
  • 提问者 HereIAm_ 回复 翔仔 #2
    注释掉了图片的部分,还是没办法传到后台,应该不是图片流的问题。
    回复 有任何疑惑可以回复我~ 2019-03-01 00:06:21
提问者 HereIAm_ 2019-02-28 23:10:43

截图相关信息

https://img1.sycdn.imooc.com//szimg/5c77f9870001b07d09550494.jpghttps://img1.sycdn.imooc.com//szimg/5c77f9b80001c80109810201.jpg


0 回复 有任何疑惑可以回复我~
  • 翔仔 #1
    contentType看起来没问题,把ajax的contentType注释掉试试?确定
    import javax.servlet.http.HttpServletRequest;吗?
    回复 有任何疑惑可以回复我~ 2019-02-28 23:19:23
  • 提问者 HereIAm_ 回复 翔仔 #2
    contentType注释掉就会出现像评论里那个控制台里的一些乱码;确定导入的包就是那个。
    回复 有任何疑惑可以回复我~ 2019-02-28 23:39:22
翔仔 2019-02-28 21:20:10

遇到问题不要慌,解决问题也是成长的途径

0 回复 有任何疑惑可以回复我~
翔仔 2019-02-28 21:19:47

同学好,同学可以尝试先将js里与图片相关的部分注释掉,也就是不要把图片传入到后台,修改后清空页面缓存,看看字符串能否传入到后台了。如果不行,跟我提供的js代码对比,并且看看后端controller

request用的package是否是

import javax.servlet.http.HttpServletRequest;


shopoperation.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/**
 
 */
$(function() {
    // 从URL里获取shopId参数的值
    var shopId = getQueryString('shopId');
    // 由于店铺注册和编辑使用的是同一个页面,
    // 该标识符用来标明本次是添加还是编辑操作
    var isEdit = shopId ? true false;
    // 用于店铺注册时候的店铺类别以及区域列表的初始化的URL
    var initUrl = '/myo2o/shopadmin/getshopinitinfo';
    // 注册店铺的URL
    var registerShopUrl = '/myo2o/shopadmin/registershop';
    // 编辑店铺前需要获取店铺信息,这里为获取当前店铺信息的URL
    var shopInfoUrl = "/myo2o/shopadmin/getshopbyid?shopId=" + shopId;
    // 编辑店铺信息的URL
    var editShopUrl = '/myo2o/shopadmin/modifyshop';
    // 判断是编辑操作还是注册操作
    if (!isEdit) {
        getShopInitInfo();
    else {
        getShopInfo(shopId);
    }
    // 通过店铺Id获取店铺信息
    function getShopInfo(shopId) {
        $.getJSON(shopInfoUrl, function(data) {
            if (data.success) {
                // 若访问成功,则依据后台传递过来的店铺信息为表单元素赋值
                var shop = data.shop;
                $('#shop-name').val(shop.shopName);
                $('#shop-addr').val(shop.shopAddr);
                $('#shop-phone').val(shop.phone);
                $('#shop-desc').val(shop.shopDesc);
                // 给店铺类别选定原先的店铺类别值
                var shopCategory = '<option data-id="'
                        + shop.shopCategory.shopCategoryId + '" selected>'
                        + shop.shopCategory.shopCategoryName + '</option>';
                var tempAreaHtml = '';
                // 初始化区域列表
                data.areaList.map(function(item, index) {
                    tempAreaHtml += '<option data-id="' + item.areaId + '">'
                            + item.areaName + '</option>';
                });
                $('#shop-category').html(shopCategory);
                // 不允许选择店铺类别
                $('#shop-category').attr('disabled''disabled');
                $('#area').html(tempAreaHtml);
                // 给店铺选定原先的所属的区域
                $("#area option[data-id='" + shop.area.areaId + "']").attr(
                        "selected""selected");
            }
        });
    }
    // 取得所有二级店铺类别以及区域信息,并分别赋值进类别列表以及区域列表
    function getShopInitInfo() {
        $.getJSON(initUrl, function(data) {
            if (data.success) {
                var tempHtml = '';
                var tempAreaHtml = '';
                data.shopCategoryList.map(function(item, index) {
                    tempHtml += '<option data-id="' + item.shopCategoryId
                            '">' + item.shopCategoryName + '</option>';
                });
                data.areaList.map(function(item, index) {
                    tempAreaHtml += '<option data-id="' + item.areaId + '">'
                            + item.areaName + '</option>';
                });
                $('#shop-category').html(tempHtml);
                $('#area').html(tempAreaHtml);
            }
        });
    }
    // 提交按钮的事件响应,分别对店铺注册和编辑操作做不同响应
    $('#submit').click(function() {
        // 创建shop对象
        var shop = {};
        if (isEdit) {
            // 若属于编辑,则给shopId赋值
            shop.shopId = shopId;
        }
        // 获取表单里的数据并填充进对应的店铺属性中
        shop.shopName = $('#shop-name').val();
        shop.shopAddr = $('#shop-addr').val();
        shop.phone = $('#shop-phone').val();
        shop.shopDesc = $('#shop-desc').val();
        // 选择选定好的店铺类别
        shop.shopCategory = {
            shopCategoryId : $('#shop-category').find('option').not(function() {
                return !this.selected;
            }).data('id')
        };
        // 选择选定好的区域信息
        shop.area = {
            areaId : $('#area').find('option').not(function() {
                return !this.selected;
            }).data('id')
        };
        // 获取上传的图片文件流
        var shopImg = $('#shop-img')[0].files[0];
        // 生成表单对象,用于接收参数并传递给后台
        var formData = new FormData();
        // 添加图片流进表单对象里
        formData.append('shopImg', shopImg);
        // 将shop json对象转成字符流保存至表单对象key为shopStr的的键值对里
        formData.append('shopStr', JSON.stringify(shop));
        // 获取表单里输入的验证码
        var verifyCodeActual = $('#j_captcha').val();
        if (!verifyCodeActual) {
            $.toast('请输入验证码!');
            return;
        }
        formData.append('verifyCodeActual', verifyCodeActual);
        // 将数据提交至后台处理相关操作
        $.ajax({
            url : (isEdit ? editShopUrl : registerShopUrl),
            type : 'POST',
            data : formData,
            contentType : false,
            processData : false,
            cache : false,
            success : function(data) {
                if (data.success) {
                    $.toast('提交成功!');
                    if (!isEdit) {
                        // 若为注册操作,成功后返回店铺列表页
                        window.location.href = "/myo2o/shopadmin/shoplist";
                    }
                else {
                    $.toast('提交失败!' + data.errMsg);
                }
                // 点击验证码图片的时候,注册码会改变
                $('#captcha_img').click();
            }
        });
    });
 
})


0 回复 有任何疑惑可以回复我~
  • 提问者 HereIAm_ #1
    老师,刚刚按照你上面的要求做了一遍,,但是发现还是不行。。。我今天也百度了一天为什么js那里收得到数据但是后端接收不到数据,百度上很多说跟contentType这个参数有关系,,老师您给看看。。
    回复 有任何疑惑可以回复我~ 2019-02-28 21:41:51
  • 提问者 HereIAm_ #2
    老师,刚刚按照你上面的要求做了一遍,,但是发现还是不行。。。我今天也百度了一天为什么js那里收得到数据但是后端接收不到数据,百度上很多说跟contentType这个参数有关系,,老师您给看看。。
    回复 有任何疑惑可以回复我~ 2019-02-28 21:42:16
  • 翔仔 回复 提问者 HereIAm_ #3
    同学可以用chrome开发者看看请求后端时的contentType是多少,截图一下,并且可以注释掉contentType试试,记得清空缓存。一般除了上面说的那处有问题,即你request用的package不对,不是import javax.servlet.http.HttpServletRequest;,就是spring-web.xml里面相关的resolver配置不正确,导致传入的图片流有问题而无法将数据传入后台。
    我电脑放公司了,明天继续看一下,同学着急也可以在群里向其他同学寻求下帮助。
    此外,可以尝试以下链接https://blog.csdn.net/weixin_39570075/article/details/79218645
    回复 有任何疑惑可以回复我~ 2019-02-28 23:00:43
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号