一、post/get传输json数据中包含特殊字符

  在使用HTTP请求传输数据时,因为他本身也需要一些字符做标记,比如= &,所以传输的数据中如果有特殊字符,就会被错误的理解成标记字符做了一些期望之外的处理。

  这个问题的解决方法有很多种,最基本的就是将这些特殊字符替换为URL编码,这样就可以正常传输了。然后服务端解析数据时会自动将URL编码转换为正常的字符,不过也有特例不会被自动转换,需要我们手动再转回来,比如"。

  URL编码表可以自行去百度,我这里只举一些例子:

  

js = "...";  //准备刚发送的json字段

js.replace(/\!/g , "%21").replace(/\"/g , "%22").replace(/\#/g , "%23").replace(/\$/g , "%24").replace(/\%/g , "%25")
.replace(/\&/g , "%26").replace(/\'/g , "%27").replace(/\(/g , "%28").replace(/\)/g , "%29").replace(/\*/g , "%2A")
.replace(/\+/g , "%2B").replace(/\,/g , "%2C").replace(/\-/g , "%2D").replace(/\./g , "%2E").replace(/\//g , "%2F")
.replace(/\:/g , "%3A").replace(/\;/g , "%3B").replace(/\</g , "%3C").replace(/\=/g , "%3D").replace(/\>/g , "%3E")
.replace(/\@/g , "%40");

二、<form>表单submit后不提交的解决方法

  对于前端开发的初学者而言,有的时候想要使用<form>表单发送数据,这时候经常会遇到一个问题。

  我们希望的是点击按钮提交表单时,调用我们自己定义的方法,然后使用ajax发送请求,最后对返回结果进行判断处理。

  但实际上,如果没有特殊处理的话,提交表单时他总会自动的向action所指向的url发送请求,默认action是本页面,这就可能带来很多错误。

  百度之后,找到了解决方法,只有<form>表单submit属性绑定的函数返回false,表单就不会发送,代码样例如下:

  

<form  id="login_form" onsubmit="return login();">
  <h1>Log in</h1>
  <input id="username" name="username" type="text" />
  <input id="password" name="password" type="password" />   <input type="submit" value="Login" />
</form>
function login() {
var username = document.getElementById('username');
var password = document.getElementById('password');   //TODO 一些数据判断 var json={
'username':username.value,
'password':password.value
};   $.post("http://127.0.0.1:8000/login/", JSON.stringify(json),
    function(result){
    //TODO结果处理     return false;
  });
  return false;
}

    这里一定要保证login()函数在任何情况下都返回false.

三、JS获取<form>表单中<input type='file'>,并提交给服务器的解决方法

  这里我使用的是 FormData 这个对象,他会自己将一个form表单封装成字典的格式,我们也可以手动的往里面添加内容。

  下面举个具体的样例:

  

<form id="addForm" onsubmit="return uploadFile();">
<input type="file" name="conf" id="fileContent"> <button type="submit" class="btn btn-xs btn-xs btn-green">提 交</button>
</form>
function uploadFile() {
var formData = new FormData($( "#addForm" )[0]);   //创建FormData对象,产生一个key为conf,value为上传文件的字典
  formData.append('key',value);  //手动添加数据
$.ajax({
url: 'http://127.0.0.1:8000/upload/' ,
type: 'POST',
data: formData,
async: false,
cache: false,
contentType: false,
processData: false,
success: function (data) {
//TODO 结果处理
},
error: function (returndata) {
alert(returndata);
}
}); return false;
}

JS 一些问题与解决方法的更多相关文章

  1. VS使用过程中,编写JS没有智能提示解决方法

    问题:编写基本Script代码没有问题,但是在编写DOM代码时候没有智能提示.也就是在编写一般javascript代码时候没有问题,但是要写DOM代码的时候发现没有智能提示,如document等都需要 ...

  2. .NET获取不到js写的cookie解决方法

    今晚使用javascript设置一个来路的cookie,之后使用ASP.NET获取这个cookie值,发现ASP.NET获取不到JS设置的cookie值,真郁闷中,以下是JS写Cookie的代码: C ...

  3. springboot+thymeleaf刨坑——首页加载js/css等失败解决方法

    在使用thymeleaf加载css或js样式,当我们进入登录页的时候发现,所有的样式都是加载失败的.原因是在新版中有这样一个坑……: 当我们设置了addInterceptors-注册拦截器的时候,通常 ...

  4. 整理前端css/js/jq常见问题及解决方法(2)

    移动端 手机 1.点击图片或按钮,选中状态影响到其他范围解决:html{-webkit-user-select:none}<meta name="msapplication-tap-h ...

  5. 整理前端css/js/jq常见问题及解决方法(1)

    1. 兼容ie8圆角的解决方法:下载ie-css3.htc文件在css中加入behavior:url(ie-css3.htc);z-index:3; position:relative 即可 2. 去 ...

  6. Vue devtool插件安装后无法使用,提示“vue.js not detected”的解决方法

    vue devtool下载 极简插件  github vue devtool安装 点击谷歌浏览器箭头所指图标-更多工具-扩展程序   ①:直接将后缀为crx的安装包拖进下图区域即可自动安装     ② ...

  7. 整理前端css/js/jq常见问题及解决方法(3)

    jq: 1.prepend(参数);//将参数内容前置再某元素内部; eg: <div id="div1">奇妙能力歌</div> $("#div ...

  8. Chrome浏览器 js 关闭窗口失效解决方法

    //获取元素ID var DelHtml = document.getElementById("imgdel"); //alert(DelHtml); //添加点击事件 DelHt ...

  9. js跨域及解决方法

    什么是跨域 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦.这里把涉及到跨域的一些问题简单地整理一下: 首 ...

随机推荐

  1. MD5+DES在C#.NET与Java/Android中的加解密使用

    一.背景后台(C#.NET)使用一个MD5+DES的加解密算法,查了下,很多网友都使用了这个算法.在Android里,也需要这个算法,如何把这个加解密算法切换成Java版,成了难题.毕竟好久没涉及到这 ...

  2. 为什么重写equals必须重写hashcode?

    示例代码: class User { private String name; public User(String name) { this.name = name; } @Override pub ...

  3. java字节码的工具(含IDEA插件)

    转:https://blog.csdn.net/qq_34039315/article/details/78561493 javap方式 最基础的方式,此处不做介绍 windows下的工具jclass ...

  4. Jmeter性能测试-分布式压力测试

    作为一个测试行业的菜鸟,由于投身于一个小公司,包揽所有的测试.刚开始的功能测试到接口测试,稳定性测试,兼容性测试等,一般由于是小项目所以对于性能有所忽略,也没怎么涉及,公司接了个大项目,后期对于性能上 ...

  5. mysql中的delete , drop 和truncate 区别

    1.delete 和 truncate 仅仅删除表数据,drop 连表数据和表结构一起删除,打个比方,delete 是单杀,truncate 是团灭,drop 是把电脑摔了. 2.delete 是 D ...

  6. java过滤器filter使用

    一:filter:过滤器,拦截servlet的请求和响应. 1. package jd.com.filter; import javax.servlet.*; import java.io.IOExc ...

  7. java环境配置针对win10(电脑重装必备) 最后一步很重要

    jdk和jre都默认安装c盘. 系统变量→新建 JAVA_HOME 变量:变量值填写jdk的安装目录(本人是 C:\Program Files\Java\jdk1.8.0_131). 系统变量→新建 ...

  8. Android 配置从GitHub上下载下来的不太规则的源代码库,并保证程序正常运行

    用过github的朋友一定会发现,我们在github上下载下来的源代码(例子和库),放到eclipse中并不是总能正常运行的,它有可能会出现这样或者那样的错误,例如:找不到jar包,配置文件错误,R文 ...

  9. jqgrid 配置分页大小及下拉项

    如何配置分页大小的下拉项?显示效果如下: 通过 rowNum 来设置默认分页大小 通过 rowList 来设置分页下拉.   rowList 的值为一个数组,比如:[10,20,30] $(" ...

  10. LNMP搭建 源码包

    LNMP源码包搭建 linux    CentOS-6.5-x86_64-bin-DVD1 nginx   版本1.8.0  下载地址:http://nginx.org/en/download.htm ...