视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Ajax的原生实现关于MIME类型的使用方法(图文教程)
2020-11-27 19:48:14 责编:小OO
文档

下面我就为大家分享一篇Ajax的原生实现关于MIME类型的使用方法,具有很好的参考价值,希望对大家有所帮助。

问题描述

下面的例子是一个Ajax的post请求的代码,这段代码在测试运行的时候,发现返回的状态码为400,服务器不能理解的请求,后来经过查看和修改,发现只需要将下面的代码稍微改造一下就好了

原代码

var send = function (url, params, fn) {
 var me = this;
 var xhr = null;
 var data = '';
 fn = fn || function() {};
 params = params || {};
 for(var item in params) {
 data += item + '=' + params[item] + '&';
 }
 if(data[data.length - 1] == '&') {
 data = data.slice(0, data.length - 1);
 }
 if(window.XMLHttpRequest) {
 xhr = new XMLHttpRequest();
 }else if(window.ActiveXObject) {
 xhr= new ActiveXObject("Microsoft.XMLHTTP");
 }
 xhr.open("post", url, true);
 xhr.setRequestHeader("Content-type", "application/json");
 xhr.onreadystatechange = function () {
 if(xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 304)) {
 fn(JSON.parse(xhr.responseText));
 }
 };
 xhr.send(JSON.stringify(params));
}

修改之后的代码

var send = function (url, params, fn) {
 var me = this;
 var xhr = null;
 fn = fn || function() {};
 params = params || {};
 if(window.XMLHttpRequest) {
 xhr = new XMLHttpRequest();
 }else if(window.ActiveXObject) {
 xhr= new ActiveXObject("Microsoft.XMLHTTP");
 }
 xhr.open("post", url, true);
 xhr.setRequestHeader("Content-type", "application/json");
 xhr.onreadystatechange = function () {
 if(xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 304)) {
 fn(JSON.parse(xhr.responseText));
 }
 };
 xhr.send(JSON.stringify(params));
}

这两段代码的差别就是,修改之后的代码去掉了关于data这个变量的处理以及在send中传递的参数变为了params这个变量

问题解惑

问题是解决了,但是我心里的疑问却产生了,之前在使用原生的Ajax的时候,当method为post的时候,传递的参数的形式是”name=123&age=32”这样子的,那么为什么现在传递一个序列化的JSON对象就可以了呢?

这时候我注意到自己所加的MIME类型,也就是设置Content-type的那处,我设置的是"application/json",这样看起来就解释的通了,这时候我回想起之前常用的MIME类型是“application/x-www-form-urlencoded”,这种时候send方法传递的参数就要求是”name=123&age=32”这样子的,到这里,解惑完毕啦(~ ̄▽ ̄)~

补充

顺便说下405这个状态码,上一次见到它的时候,是我前端发送请求的时候,传递的参数不对,这次遇到它的时候,是因为后台还没有添加这个请求的处理

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

Jquery的get,post,ajax,getJSON函数使用详解

ajax请求操作返回数据顺序

JS基于ajax操作信息的使用

下载本文
显示全文
专题