JS-37-jQuery06-ajax

用JavaScript写AJAX前面已经介绍过了,主要问题就是不同浏览器需要写不同代码,并且状态和错误处理写起来很麻烦。

用JavaScript写AJAX

用jQuery的相关对象来处理AJAX,不但不需要考虑浏览器问题,代码也能大大简化。

一、ajax()函数

jQuery在全局对象jQuery(也就是$)绑定了ajax()函数,可以处理AJAX请求。

ajax(url, settings)函数需要接收一个URL和一个可选的settings对象。

settings对象常用的选项如下:

  • async:是否异步执行AJAX请求,默认为true,千万不要指定为false

  • method:发送的Method,缺省为'GET',可指定为'POST''PUT'等;

  • contentType:发送POST请求的格式,默认值为'application/x-www-form-urlencoded; charset=UTF-8',也可以指定为text/plainapplication/json

  • data:发送的数据,可以是字符串、数组或object。如果是GET请求,data将被转换成query附加到URL上,如果是POST请求,根据contentType把data序列化成合适的格式;

  • headers:发送的额外的HTTP头,必须是一个object;

  • dataType:接收的数据格式,可以指定为'html''xml''json''text'等,缺省情况下根据响应的Content-Type猜测。

下面的例子发送一个GET请求,并返回一个JSON格式的数据:

var jqxhr = $.ajax('/api/categories', {dataType: 'json'
});
// 请求已经发送了

 

不过,如何用回调函数处理返回的数据和出错时的响应呢?

还记得Promise对象吗?

jQuery的jqXHR对象类似一个Promise对象,我们可以用链式写法来处理各种回调:

function ajaxLog(s) {var txt = $('#test-response-text');txt.val(txt.val() + '\n' + s);
}$('#test-response-text').val('');var jqxhr = $.ajax('/api/categories', {dataType: 'json'
}).done(function (data) {ajaxLog('成功, 收到的数据: ' + JSON.stringify(data));
}).fail(function (xhr, status) {ajaxLog('失败: ' + xhr.status + ', 原因: ' + status);
}).always(function () {ajaxLog('请求完成: 无论成功或失败都会调用');
});

或者:

$.ajax({  url: 'http://example.com/data', // 跨域的 URL  dataType: 'json', // 告诉 jQuery 期望返回的是 JSONP 格式的数据  success: function(data) {  console.log(data); // 打印返回的数据  },  error: function(jqXHR, textStatus, errorThrown) {  console.log('Error: ' + textStatus, errorThrown);  }  
});

二、get()函数 

对常用的AJAX操作,jQuery提供了一些辅助方法。

由于GET请求最常见,所以jQuery提供了get()方法,可以这么写:

var jqxhr = $.get('/path/to/resource', {name: 'Bob Lee',check: 1
});

第二个参数如果是object,jQuery自动把它变成query string然后加到URL后面,实际的URL是:

/path/to/resource?name=Bob%20Lee&check=1

这样我们就不用关心如何用URL编码并构造一个query string了。

三、post()函数

post()get()类似,但是传入的第二个参数默认被序列化为application/x-www-form-urlencoded

var jqxhr = $.post('/path/to/resource', {name: 'Bob Lee',check: 1
});

实际构造的数据name=Bob%20Lee&check=1作为POST的body被发送。

当使用 $.post 发送请求时,你可以通过回调函数来处理服务器的响应。

这个回调函数通常有两个参数:服务器返回的数据和状态文本(通常是 "success", "error", "abort", 或 "timeout")。

四、getJSON()函数

由于JSON用得越来越普遍,所以jQuery也提供了getJSON()方法来快速通过GET获取一个JSON对象:

var jqxhr = $.getJSON('/path/to/resource', {name: 'Bob Lee',check: 1
}).done(function (data) {// data已经被解析为JSON对象了
});

五、安全限制

jQuery的AJAX完全封装的是JavaScript的AJAX操作,所以它的安全限制和前面讲的用JavaScript写AJAX完全一样。

如果需要使用JSONP,可以在ajax()中设置jsonp: 'callback',让jQuery实现JSONP跨域加载数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/2199.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RK3568 android11 修改关机弹窗界面

需要修改关机弹窗界面&#xff0c;当前界面我已经按照客户需求去掉emergency 但是客户需要按其他区域可以实现返回&#xff0c;也就是点击黑色背景取消dialog 嗑代码发现黑色布局为&#xff1a; <node index"0" text"" resource-id"com.android.…

逆向修改app就可以游戏充值到账?

hello ,大家好, 现在市场仍然流行着非常多的传奇类游戏私服或者其他类型的游戏私服,随着私服越来越多(很多并不合法),越来越多的人加入了破解,逆向修改,或者代充的队伍并从中获利。这里我给大家分享一下这些做代充的常规的做法,以及大家作为游戏服务器如何避坑做强校验…

c#开发vs2022安装地址

C#学习visual Studio 2022安装与配置详细过程_vs2022怎么配置c#环境-CSDN博客

CSS基础:最详细 padding的 4 种用法解析

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃&#xff0c;大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端工具”&#xff0c;可获取 We…

Java8 中map中删除元素的简单方法

通过values删除 map.values().removeIf(value -> !value.contains("1"));通过keySet删除 map.keySet().removeIf(key -> key ! 1);通过entrySet删除 map.entrySet().removeIf(entry -> entry.getKey() ! 1);

编写一款2D CAD/CAM软件(十四)绘制工具栏

前面的文章已经封装了数个最基本的图元&#xff0c;但是视图的呈现是基于测试数据形成的。为了尽快完善软件交互的框架和能力&#xff0c;本文将增加工具栏。 资源文件 1.首先&#xff0c;创建按钮图标。使用绘图软件构建出工具栏按钮的图标&#xff0c;绘图软件多种多样&…

Vue之v-on事件修饰符的含义及使用

背景&#xff1a;Vue 拆封了一个组件&#xff0c;在组件里面会使用一个方法来改变父组件传过来的值&#xff0c; 但是在子组件里面操作父组件的数据变更&#xff0c;实在比较麻烦&#xff08;因为单向数据流&#xff09;&#xff0c; So 能不能直接在组件上面绑定事件方法呢&…

Nest 快速上手 —— (一)nest介绍与启动安装

参考资料&#xff1a;https://docs.nestjs.com/ 0.介绍 Nest (NestJS)是一个用于构建高效、可扩展的Node.js服务器端应用程序的框架。它使用渐进式JavaScript&#xff0c;构建并完全支持TypeScript(但仍然允许开发人员使用纯JavaScript编写代码)&#xff0c;并结合了OOP(面向对…

HCIP【路由过滤、路由引入实验】

目录 实验要求&#xff1a; 实验拓扑图&#xff1a; 实验思路&#xff1a; 实验步骤&#xff1a; 一、配IP地址 二、在相应的设备上配置RIP协议和OSPF协议 三、路由引入 四、路由过滤 五、配置静默接口 实验要求&#xff1a; 1、按照图示配置 IP 地址&#xff0c;R1&a…

网络靶场实战-Qiling Fuzz实例分析

背景 在上一小节中&#xff0c;介绍了qiling框架的背景和基础使用&#xff0c;并以相关的CTF和qilinglab实例进行练习加深对qiling框架的使用&#xff0c;后续并简单介绍了qiling fuzz的功能。 在这一小节&#xff0c;我们将对qiling fuzz iot设备进行测试以及以实例的方式对…

FineReport报表问题- SET LOGSIZE FAILED 解决

1.问题描述 Oops!!!非常抱歉&#xff0c;您当前无法访问此页。 发生的问题是&#xff1a;CREATE EMB-DB: SET LOGSIZE FAILED! 详细信息 java.lang.RuntimeException: CREATE EMB-DB: SET LOGSIZE FAILED!<br> at com.fr.data.core.db.DBUtils.getEmbeddedDB(Unknown So…

C++ 面向对象-封装

C 是一种多范式编程语言&#xff0c;它支持面向对象编程&#xff08;OOP&#xff09;范式。面向对象编程是一种程序设计思想&#xff0c;其中程序由对象组成&#xff0c;每个对象都是一个实例&#xff0c;具有数据和相关操作。在C中&#xff0c;实现面向对象编程主要通过类和对…

蓝桥杯2022年第十三届决赛真题-卡牌

贪心&#xff1a;循环m次&#xff0c;首先每次取卡片数最少的种类&#xff0c;判断它是否有补充机会&#xff0c;如果没有补充机会&#xff0c;根据短板效应&#xff0c;它的数量就是套牌数&#xff0c;结束。如果可以补充&#xff0c;就将它的数目增加1&#xff0c;m的数量减少…

ubuntu22.04搭建dns内网

近期&#xff0c;需要在无网络的ubuntu环境下搭建内部可用的dns内网&#xff0c;总共花费3个工作日晚上&#xff0c;总算成功搭建&#xff0c;做个记录&#xff0c;记录踩坑记录&#xff0c;同时方便以后翻阅。 安装软件包&#xff1a; 有网络环境下&#xff0c;比较简单&…

一个java项目中,如何使用sse协议,构造一个chatgpt的流式对话接口

前言 如何注册chatGPT&#xff0c;怎么和它交互&#xff0c;本文就不讲了&#xff1b;因为网上教程一大堆&#xff0c;而且你要使用的话&#xff0c;通常会再包一个算法服务&#xff0c;用来做一些数据训练和过滤处理之类的&#xff0c;业务服务基本不会直接与原生chatGPT交互。…

[Android]Jetpack Compose自定义主题

1.ColorScheme ColorScheme 是 Jetpack Compose 中的一个类&#xff0c;用于定义一组颜色&#xff0c;这些颜色共同构成了应用程序的颜色主题。在 Material Design 系统中&#xff0c;颜色方案帮助确保应用程序具有一致的视觉外观&#xff0c;同时也支持色彩的可访问性和美观性…

Lambda 禁止直接从公网访问

为了禁止 Lambda 直接从公网访问&#xff0c;您可以执行以下步骤&#xff1a; 更新 Lambda 函数的策略&#xff1a; 登录 AWS 控制台&#xff0c;导航至 Lambda 服务。找到需要修改的 Lambda 函数&#xff0c;并进入其配置页面。在函数配置页面&#xff0c;找到与 Lambda 函数…

7-17 KMP模式匹配算法

给定主串s和模式串p&#xff0c;编写程序使用KMP算法进行模式匹配&#xff0c;计算p在s中出现的首位置&#xff0c;若p不在s中则输出−1。字符串下标从0开始。 输入格式: 输入为2行&#xff0c;第1行为主串s&#xff0c;第2行为模式串p。主串和模式串长度不超过105。 输出格…

MVC4自带的JS、CSS优化功能

方法: Application_Start事件中 或 类 BundleConfig中的RegisterBundles方法中 加入代码: BundleTable.EnableOptimizations true;//是否启用优化 说明: 所说的JS、CSS优化&#xff1a; 缓存&#xff1a;首次访问站点&#xff0c;JS和CSS文件会下载到浏览器缓存中&#…

OpenCV-基于阴影勾勒的图纸清晰度增强算法

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 实现原理 大家在工作和学习中&#xff0c;无论是写报告还是论文&#xff0c;经常有截图的需求&#xff0c;比如图表、图纸等&…