一、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. Blog Contents

    This page is intently left for contents catalog of my articles. |----------------------------------- ...

  2. HDU 1269 迷宫城堡(判断有向图强连通分量的个数,tarjan算法)

    迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  3. OpenGL笔记(三) GLSL语法与内建函数

    GLSL,OpenGL Shading Language,GLSL中没有指针,并且没有任何类型的字符串或字符. (1)GLSL的修饰符与基本数据类型 const:用于声明非可写的编译时常量变量: at ...

  4. php删除文件夹和其下的内容

    原文地址:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/05/13/2045158.html <?php function del ...

  5. CAN设计与应用指南

    CAN设计与应用指南 0.前言 这是我为公司写的一个关于CAN总线的入门文章,对全面理解CAN总线特性很有帮助,拿出来分享给大家. 1. 简介 CAN总线由德国BOSCH公司开发,最高速率可达到1Mb ...

  6. 【本地服务器】用nginx进行反向代理处理(windows)

    在通过json-server搭建本地服务器得到 http://localhost:3000/todos   的基础上,要想将接口改为www.test.com/todos这样的形式 ,则需要用nginx ...

  7. SAP函数 LAST_DAY_OF_MONTHS 获取月末最后一天日期

    DATA LAST_DATE TYPE SY-DATUM. CALL FUNCTION 'LAST_DAY_OF_MONTHS' EXPORTING day_in = sy-datum IMPORTI ...

  8. 20155229《网络对抗技术》Exp9:Web安全基础

    实验内容 Webgoat实践下相关实验. 实验步骤 WebGoat: Webgoat是OWASP组织研究出的一个专门进行web漏洞实验的应用品台,这个平台里包含了web中常见的各种漏洞,例如:跨站脚本 ...

  9. 20155331《网络对抗》 Exp9 Web安全基础

    20155331<网络对抗> Exp9 Web安全基础 实验过程 WebGoat 在终端中输入java -jar webgoat-container-7.0.1-war-exec.jar开 ...

  10. ucos获得系统时间OSTimeGet();

    OSTimeGet() 获得系统节拍值OSTime,滴答定时器中断一次OSTime++.