欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Ajax请求SSM后台传值方式踩坑

发布时间:2025/3/19 编程问答 26 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Ajax请求SSM后台传值方式踩坑 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

场景

在Ajax请求接口返回结果后,再次请求后台Controller。原来代码

$("#book").submit(function() {if($(this).Andrew_Validate("submit_Validate")){$("#book > button:submit").attr("disabled","disabled").text("订单提交中...");$('#clause').attr("disabled","disabled");var actionurl = $(this).attr("action"); //提交路径var data = $(this).serialize();console.log(data);$.ajax({async : true,cache : false,type : 'POST',url : actionurl,data : data,success : function(data) {if("200"==data.statusCode){//请求成功window.location.href = "${ctx}/frontPage/passFlight/GJbookPay.html?orderId="+data.result;}if("300"==data.statusCode){$("#book > button:submit").removeAttr("disabled","disabled").text("下一步,去支付");$('#clause').removeAttr("disabled","disabled");if(-1==data.result){//请求失败处理函数webToast(data.message, "middle", "mask", 1000);}else{var contactName=$("#contactName").val();var contactAreaCode=$("#contactAreaCode").val();var contactAreaMobile=$("#contactAreaMobile").val();var email=$("#email").val();var phone=$("#phone").val();var contactCookie = $.cookie("bus__contact");//将联系人信息存储到cookie中if(contactCookie && contactCookie!=""){//查看是否是当前登录用户的填写信息contactCookies=contactCookie.split(";"); //字符分割var tempCookie;for(j = 0; j < contactCookies.length; j++) { tempCookie=contactCookies[j].split(",");if(tempCookie[4]==phone){var s=contactName+','+contactAreaCode+','+contactAreaMobile+','+email+','+phone;contactCookies.splice(j,1,s);$.cookie('bus__contact',contactCookies);}else{var contactResult=contactCookie+";"+contactName+','+contactAreaCode+','+contactAreaMobile+','+email+','+phone;$.cookie('bus__contact',contactResult);}}}else{var contactResult=contactName+','+contactAreaCode+','+contactAreaMobile+','+email+','+phone;$.cookie('bus__contact',contactResult);}Andrew_Popupwin({dom: "#login_dialog_plug_popupWin", //弹窗内容的布局position: "middle", //位置类型(top,bottom,left,right,middle)effectIn: "bounceInDown", //弹窗显示效果effectOut: "bounceOutDown", //弹窗消失效果maskPosition:"11", //Mask的z-index数值closeBtn: ".login_dialog_plugin_close" //关闭弹窗按钮})}}},error : function(err) {$("#book > button:submit").removeAttr("disabled","disabled").text("下一步,去支付");$('#clause').removeAttr("disabled","disabled");//请求失败处理函数webToast("请求错误", "middle", "mask", 1000);}});}return false;});

避免踩坑

后台Controller返回的是对象,直接接受后使用

  window.location.href = "${ctx}/frontPage/passFlight/GJbookPay.html?orderId="+data.result;

是不行的会提示

Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

如果是只传递一个参数比如ID等则就可以。

修改为:

$("#book").submit(function() {if($(this).Andrew_Validate("submit_Validate")){$("#book > button:submit").attr("disabled","disabled").text("订单提交中...");$('#clause').attr("disabled","disabled");var actionurl = $(this).attr("action"); //提交路径var data = $(this).serialize();console.log(data);$.ajax({async : true,cache : false,type : 'POST',url : actionurl,data : data,success : function(data) {debuggerif("200"==data.statusCode){debugger$.ajax({async : true,cache : false,type : 'POST',url : "${ctx}/frontPage/passFlight/GJbookPay.html",data : data.result});//window.location.href = "${ctx}/frontPage/passFlight/GJbookPay.html?orderId="+data.result;}if("300"==data.statusCode){$("#book > button:submit").removeAttr("disabled","disabled").text("下一步,去支付");$('#clause').removeAttr("disabled","disabled");if(-1==data.result){//请求失败处理函数webToast(data.message, "middle", "mask", 1000);}else{var contactName=$("#contactName").val();var contactAreaCode=$("#contactAreaCode").val();var contactAreaMobile=$("#contactAreaMobile").val();var email=$("#email").val();var phone=$("#phone").val();var contactCookie = $.cookie("bus__contact");//将联系人信息存储到cookie中if(contactCookie && contactCookie!=""){//查看是否是当前登录用户的填写信息contactCookies=contactCookie.split(";"); //字符分割 var tempCookie;for(j = 0; j < contactCookies.length; j++) { tempCookie=contactCookies[j].split(",");if(tempCookie[4]==phone){var s=contactName+','+contactAreaCode+','+contactAreaMobile+','+email+','+phone;contactCookies.splice(j,1,s);$.cookie('bus__contact',contactCookies);}else{var contactResult=contactCookie+";"+contactName+','+contactAreaCode+','+contactAreaMobile+','+email+','+phone;$.cookie('bus__contact',contactResult);}}} else{var contactResult=contactName+','+contactAreaCode+','+contactAreaMobile+','+email+','+phone; $.cookie('bus__contact',contactResult);}Andrew_Popupwin({dom: "#login_dialog_plug_popupWin", //弹窗内容的布局position: "middle", //位置类型(top,bottom,left,right,middle)effectIn: "bounceInDown", //弹窗显示效果effectOut: "bounceOutDown", //弹窗消失效果maskPosition:"11", //Mask的z-index数值closeBtn: ".login_dialog_plugin_close" //关闭弹窗按钮})}}},error : function(err) {$("#book > button:submit").removeAttr("disabled","disabled").text("下一步,去支付");$('#clause').removeAttr("disabled","disabled");//请求失败处理函数webToast("请求错误", "middle", "mask", 1000);}});}return false;});

 

总结

以上是生活随笔为你收集整理的Ajax请求SSM后台传值方式踩坑的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。