一、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. DNS主从复制及子域(三)

    主从DNS 主辅DNS服务器数据同步的过程,首先master DNS服务器每 次修改完成并重启服务后,将传送notify给所有的Slave DNS服务器. Slave DNS服务器将查询Master服 ...

  2. js 根据相对路径url获得完整路径url

    自定义方法 GetPath(url) ///根据相对路径得到完整URL ///strUrl:URL相对地址 var GetPath = function (strUrl) { if (strUrl.t ...

  3. 【webstorm】project目录树显示不出

    问题原因:webstorm自动生成的配置文件 .idea/modules.xml损坏. 解决: 1.关掉webstorm: 2.删除该项目下的.idea文件夹(如果隐藏,请设置显示隐藏文件夹): 3. ...

  4. springboot mybatis 后台框架平台 集成代码生成器 shiro 权限

    1.代码生成器: [正反双向](单表.主表.明细表.树形表,快速开发利器)freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本.处理类.service等完整模块2. ...

  5. 20155209 Exp5 MSF基础应用

    Exp5 MSF基础应用 实验准备 在实验之前,上网搜集了很多有关Metasploit渗透测试的资料.对这次实验影响最大的是一篇最受欢迎的10个Metasploit模块和插件.排名第一位的是MSB-M ...

  6. 浅谈Objeact.clone克隆(纯个人理解,如有错误请指正)

    现在先来看一下jdk给出的Object.clone源码和注释 /** * Creates and returns a copy of this object. The precise meaning ...

  7. Azure 基础:自定义 Table storage 查询条件

    本文是在 <Azure 基础:Table storage> 一文的基础上介绍如何自定义 Azure Table storage 的查询过滤条件.如果您还不太清楚 Azure Table s ...

  8. Appium+python自动化4-元素定位uiautomatorviewer

    前言 环境搭建好了,下一步元素定位,元素定位本篇主要介绍如何使用uiautomatorviewer,通过定位到页面上的元素,然后进行相应的点击等操作. uiautomatorviewer是androi ...

  9. CentOS 6.8 安装Maven

    1.下载maven安装包到developer文件目录下 2,解压缩maven,命令: -bin.tar.gz 3.配置maven路径到环境变量中 export JAVA_HOME=/usr/java/ ...

  10. Vulkan入门流程

    原文摘自Vulkan入门流程 Vulkan是Khronos Group(OpenGL标准的维护组织)开发的一个新API,它提供了对现代显卡的一个更好的抽象,与OpenGL和Direct3D等现有api ...