前端 Ajax请求 unable to decode value

约定不等于承诺〃 2022-05-20 03:06 237阅读 0赞

前言

开发中,负责的商品这一块,添加和修改商品规格时,如果添加的规格种含有特殊字符,如:%,$,比如:酒,可能有一个度数这个规格,值为:56%。这个时候,ajax请求传入参数,就会报unable to decode value错误。

解决办法

将字符串用encodeURI函数进行编码,再进行ajax请求,就ok了。

贴上代码

  1. function addOrUpdateGoods(flag){
  2. // 弹窗提示
  3. wybc.alert({
  4. text: '确认添加商品吗?',
  5. }, function ($modal) {
  6. var url = "";
  7. if(flag){
  8. url = "a_goods";
  9. }else{
  10. url = "u_goods";
  11. }
  12. var $formData = $("#goodsInfoForm").serialize();
  13. // console.log(encodeURI(submitSpecBtn()))
  14. //encodeURI() 函数可把字符串作为 URI 进行编码。 submitSpecBtn()返回的是一个JSON.stringify(specTableAllData)转的json字符串,specTableAllData是数组[]
  15. //这里submitSpecBtn()函数返货的字符串中如果有$,%等特殊字符,ajax请求时会报错:“unable to decode value”,所以用encodeURI()进行编码
  16. $formData = $formData +"&"+"specStrData=" + encodeURI(submitSpecBtn());
  17. $.ajax({
  18. url: url,
  19. method: "post",
  20. data: $formData,
  21. success: function(res){
  22. $modal.modal('hide');
  23. if(res.errorCode){
  24. wybc.tips({text: res.msg,lasting: true});
  25. return;
  26. }
  27. setTimeout(function(){
  28. tx.aside_ajax('g_source_goods_config');
  29. },400);
  30. },
  31. error: function () {
  32. $modal.modal('hide');
  33. }
  34. })
  35. });
  36. }
  37. // 提交规格表格数据
  38. function submitSpecBtn() {
  39. //判断添加商品所有规格值名称均不能相同 重要
  40. var _specValueAll = [];
  41. $("input[name='specValue']").each(function () {
  42. var _specValue = $(this).val();
  43. _specValueAll.push(_specValue);
  44. });
  45. var nary = _specValueAll.sort();
  46. for(var i = 0; i < _specValueAll.length; i++) {
  47. if (nary[i] == nary[i + 1]) {
  48. alert("商品规格重复内容:" + nary[i]);
  49. return false;
  50. }
  51. }
  52. var specTableAllData = []; //表格数组
  53. $("#specTbody tr").each(function (trindex, tritem) { //遍历每一行
  54. var specTableObj = {}; // 表格对象、将表格的每一行当成一个对象
  55. $(tritem).find("input").each(function (tdindex, tditem) {
  56. console.log("tdindex:" + tdindex);
  57. switch (tdindex)
  58. {
  59. case 0:
  60. specTableObj.goodsSpecIdA = $(tditem).val();
  61. // 处理规格图
  62. var _imgSrc = $(tditem).attr("data-img");
  63. if (_imgSrc == undefined || _imgSrc == "undefined") {
  64. specTableObj.specImg = null;
  65. } else {
  66. specTableObj.specImg = $(tditem).attr("data-img");
  67. }
  68. break;
  69. case 1:specTableObj.goodsSpecValueA = $(tditem).val();
  70. break;
  71. case 2:specTableObj.goodsSpecIdB = $(tditem).val();
  72. break;
  73. case 3:specTableObj.goodsSpecValueB = $(tditem).val();
  74. break;
  75. case 4:specTableObj.goodsSpecIdC = $(tditem).val();
  76. break;
  77. case 5:specTableObj.goodsSpecValueC = $(tditem).val();
  78. break;
  79. case 6:specTableObj.amount = $(tditem).val();
  80. break;
  81. }
  82. });
  83. specTableAllData.push(specTableObj);
  84. });
  85. return JSON.stringify(specTableAllData);
  86. }

发表评论

表情:
评论列表 (有 0 条评论,237人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ajax请求返回map,前端获取结果

    因业务需求,今天需要ajax请求的时候从后端返回一个map,但是问题是怎么在前端取值,这个以前遇到过,以为会比较简单,但是百度很多答案都不完整,导致没有办法借鉴。这里做下记录

    相关 前端Ajax请求超时处理

    1、步骤解析: 第一步:将网络请求事件赋值给变量ajaxTimeOut  第二步:通过设置timeout属性值,来定义超时时间 第三步:通过complete中的st