实战里踩过 jQuery 的那些坑

我是先学习的原生 js,只拿过原生 js 写过一些简单的小练习。在做实际项目时,使用 jQuery ,但是因为没有系统学习过,而是以项目驱动学习,用到哪,查到哪,经常会踩到一些坑,在此一并记录,希望自己以后不会再在同一个问题上栽跟头。

一、jQuery Ajax

文件上传及 url 默认编码问题、content-type 问题

jQuery Ajax 默认会给传入的 data 进行 url 编码,如果有时候需要上传文件,就不需要使用 url 编码。

<input type="file" class="btn btn-primary h-image-input">

var form = new FormData();
form.append("photo", $(".h-image-input")[0].files[0]);
$.ajax({
    type:"POST",
    url:"/hotel/picupload",
    processData: false,  // 不对数据进行 url 编码处理
    contentType: false,  // 设置此处,不设置content-type, formdata会自动设置
    data: form,
    dataType: "json",
    //成功返回之后调用的函数             
    success: function(data) {
    },
    error: function () {
    }
});

  • processData:当设置 data 选项为对象(或将对象作为第二个参数传递给 jQuery.get() 和相关方法)时,jQuery 通常会将该对象转换成字符串,该字符串遵守标准的 HTML “application/x-www-form-urlencoded” 格式。如果想省略该步骤(比如想将 Document 对象作为 POST 请求体发送),请设置该项为 false。
  • contentType:请求需要的 HTTP Content-Type 头。默认是 “application/x-www-form-urlencoded”。这是 HTML 表单和绝大部分服务器脚本使用的正常值。如果将 Type 选项设置为 “POST” ,想发送纯文本或 XML 文档作为请求体时,需要设置该选项。如果需要上传文件,需要将该项设置为 “multipart/form-data”,如果设置该项为 false,XMLHTTPRequest 的 send() 方法会自动设置 “Content-Type” 头。详情请见《Javascript 权威指南(第6版)》P499、557


jQuery(function ($) { ... } )

单独实例化问题

在各 js 文件里都有 $(function () {...}) 或者 jQuery(function ($) {...}) ,但是这些是在 DOMReady 后执行的不同的函数,里面的局部变量不能相互使用,有各自的闭包。(其实这不是 jQuery 的坑,而是正宗的 js 函数和闭包问题,只是自己踩了...)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值