一、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. BZOJ2226:LCMSum(欧拉函数)

    Description Given n, calculate the sum LCM(1,n) + LCM(2,n) + .. + LCM(n,n), where LCM(i,n) denotes t ...

  2. Controller中添加一个异步的Action

    给一段示例代码: public Task<ActionResult> TbReport(string code) { return Task.Factory.StartNew(() =&g ...

  3. [浅谈CSS核心概念] CSS布局模型:float和position

    1.流动模型 HTML元素在默认情况下都是按照"流动模型"进行布局的,网上也有人称之为"普通流"."文档流"之类的.这种布局模式的特点在于: ...

  4. 【转】php容易犯错的10个地方

    原文地址: http://www.toptal.com/php/10-most-common-mistakes-php-programmers-make 译文地址:http://codecloud.n ...

  5. java的myeclipse,java页面改动默认的javadoc方法

    在项目中右键点击新建class文件,在弹出的框中选择"here" 勾上enable project specific settings 选择comments中的types然后点击e ...

  6. SonarQube-Centos环境设置为系统服务

    1.准备工作 官方文档:https://docs.sonarqube.org/latest/setup/operate-server/ 2.配置 /sonar.sh /usr/bin/sonar cd ...

  7. python基础2之字符串、列表、字典、集合

    内容概要: 一.python2 or 3 二.字符串拼接 三.字符串 四.列表.元祖 五.字典 六.集合 七.练习 一.python2 or python3 目前大多使用python2.7,随着时间的 ...

  8. # 2017-2018-2 20155319《网络对抗技术》Exp9 :Web安全基础

    2017-2018-2 20155319<网络对抗技术>Exp9 :Web安全基础 实践过程 webgoat准备 从GitHub上下载jar包(老师的虚拟机中有 无需下载) 拷贝到本地,并 ...

  9. linux & windows下重启oracle

    Linux:方法1 用root以ssh登录到linux,打开终端输入以下命令: cd $ORACLE_HOME #进入到oracle的安装目录 dbstart #重启服务器 lsnrctl start ...

  10. Luogu T24242 购物券Ⅰ(数据已加强)

    这是一道比赛时的题目,但由于我没报名,所以浪费了一个大好的切水题的机会. 是经典的meet in middle(折半搜索)的模板题,但是之前一直没找到这种题目,今天终于看到了. 由于m的范围极大,因此 ...