ArcGIS API for JavaScript 4.15系列(7)——Dojo中的Ajax请求操作

news2024/11/16 6:18:21

1、前言

作为重要的前后端交互技术,Ajax被广泛应用于Web项目中。无论是jQuery时代的$.ajax还是Vue时代下的axios,它们都对Ajax做了良好的封装处理。而Dojo也不例外,开发者使用dojo/request模块可以轻松实现Ajax相关操作,下面开始介绍。

2、Get请求的一般格式

Dojo中的dojo.request模块提供了request.get方法,该方法可以向后台发送Get请求,其一般格式如下所示:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>demo</title>
    <script src="http://localhost/arcgis_js_api/library/4.15/dojo/dojo.js"></script>
</head>
<body>
    <input id="userName" type="text" value="admin" />
    <input id="password" type="password" value="12345" />
    <button id="btn">提交</button>
    <script>
        require(['dojo/dom', 'dojo/on', "dojo/request"], function (dom, on, request) {
            on(dom.byId('btn'), 'click', function () {
                // 获取表单值
                var userName = dom.byId('userName').value;
                var password = dom.byId('password').value;

                // 发送Get请求
                request.get('Handlers/GetDataHandler.ashx', {
                    query: 'userName=' + userName + '&password=' + password,
                    sync: false,
                    handleAs: 'json'
                }).then(
                    // 请求成功的回到函数
                    function (response) {
                        window.alert('用户:' + response.UserName + '\r\n密码:' + response.Password);
                    },
                    
                    // 求情失败的回调函数
                    function (error) {
                        window.alert(error);
                    }
                )
            })
        });
    </script>
</body>
</html>

后台代码如下:

using Newtonsoft.Json;
using System.Web;

namespace App.Handlers
{
    /// <summary>
    /// GetDataHandler 的摘要说明
    /// </summary>
    public class GetDataHandler : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";

            // 获取参数
            string userName = context.Request["userName"].ToString();
            string password = context.Request["password"].ToString();

            // 创建对象
            User user = new User
            {
                UserName = userName,
                Password = password
            };

            // 输出
            context.Response.Write(JsonConvert.SerializeObject(user));
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }

    public class User
    {
        public string UserName { get; set; }
        public string Password { get; set; }
    }
}

运行结果如下图所示:

在这里插入图片描述

3、Post请求的一般格式

Dojo中的dojo.request模块提供了request.post方法,该方法可以向后台发送Post请求,其一般格式如下所示:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>demo</title>
    <script src="http://localhost/arcgis_js_api/library/4.15/dojo/dojo.js"></script>
</head>
<body>
    <input id="userName" type="text" value="admin" />
    <input id="password" type="password" value="12345" />
    <button id="btn">提交</button>
    <script>
        require(['dojo/dom', 'dojo/on', "dojo/request"], function (dom, on, request) {
            on(dom.byId('btn'), 'click', function () {
                // 获取表单值
                var userName = dom.byId('userName').value;
                var password = dom.byId('password').value;

                // 发送Get请求
                request.post('Handlers/GetDataHandler.ashx', {
                    data: {
                        userName: userName,
                        password: password
                    },
                    sync: false,
                    handleAs: 'json'
                }).then(
                    // 请求成功的回到函数
                    function (response) {
                        window.alert('用户:' + response.UserName + '\r\n密码:' + response.Password);
                    },

                    // 求情失败的回调函数
                    function (error) {
                        window.alert(error);
                    }
                )
            })
        });
    </script>
</body>
</html>

后台代码如下:

using Newtonsoft.Json;
using System.Web;

namespace App.Handlers
{
    /// <summary>
    /// GetDataHandler 的摘要说明
    /// </summary>
    public class GetDataHandler : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";

            // 获取参数
            string userName = context.Request["userName"].ToString();
            string password = context.Request["password"].ToString();

            // 创建对象
            User user = new User
            {
                UserName = userName,
                Password = password
            };

            // 输出
            context.Response.Write(JsonConvert.SerializeObject(user));
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }

    public class User
    {
        public string UserName { get; set; }
        public string Password { get; set; }
    }
}

运行结果如下图所示:

在这里插入图片描述

4、query参数

在上面的代码中,Get请求有一个query参数,该参数主要用于URL传值。一般情况下,Get请求的参数包含在URL中,代码如下:

request.get('Handlers/GetDataHandler.ashx?userName=' + userName + '&password=' + password, {
	sync: false,
    handleAs: 'json'
})

Dojo允许把Get请求的参数写在query参数中,代码如下:

request.get('Handlers/GetDataHandler.ashx', {
    query: 'userName=' + userName + '&password=' + password,
    sync: false,
	handleAs: 'json'
})

5、data参数

Get请求中,我们可以把需要传递的参数直接写在URL中,也可以写在query参数中。而在Post请求中,参数需要定义在data参数的键值对中,代码如下:

request.post('Handlers/GetDataHandler.ashx', {
    data: {
        userName: userName,
        password: password
    },
    sync: false,
    handleAs: 'json'
})

6、handleAs参数

handleAs参数用于定义后台传回的数据格式。上面的代码将handleAs参数的值设置为json,这表示后台传回的数据会被浏览器解析为JSON对象,因此在回调函数中可以使用response.UserName获取用户名,代码如下:

function (response) {
    window.alert('用户:' + response.UserName + '\r\n密码:' + response.Password);
}

如果将上面代码中handleAs参数的值设置为text,则运行结果如下所示。因为此时浏览器会将后台返回的数据解析为一般的文本字符串,所以无法通过response.UserNameresponse.Password获取值,运行结果自然也就是undefined了。

在这里插入图片描述

7、sync参数

一般情况下,Ajax都会被设置为异步执行,因此Ajax请求并不会阻塞后续的代码执行。sync参数表示是否同步执行,true表示同步执行,false表示异步执行。先看一段异步执行的代码:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>demo</title>
    <script src="http://localhost/arcgis_js_api/library/4.15/dojo/dojo.js"></script>
</head>
<body>
    <script>
        require(["dojo/request"], function (request) {
            // 异步Ajax
            request.post('Handlers/GetDataHandler.ashx', {
                sync: false,
                handleAs: 'text'
            }).then(function (response) {
                console.log(response);
            })

            // 其他代码
            console.log('Hello World');
        });
    </script>
</body>
</html>

后台代码如下:

using System.Web;

namespace App.Handlers
{
    /// <summary>
    /// GetDataHandler 的摘要说明
    /// </summary>
    public class GetDataHandler : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            context.Response.Write("执行Ajax");
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

运行结果如下所示,可以发现异步的Ajax请求并未阻塞其他代码的执行。

Hello World
执行Ajax

如果将sync参数的值设置为true则表示同步执行,此时Ajax请求会阻塞其他代码的执行,运行结果如下所示:

执行Ajax
Hello World

8、结语

本文简单介绍了Dojo中的Ajax请求操作。其实Dojo中的Ajax模块内容非常丰富,有兴趣的同志可以访问Dojo官方文档自行了解。

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

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

相关文章

UNP 简介

目录 从一个简单的时间获取客户端开始 socket 指定服务器 IP 地址与端口 与服务器建立连接并读取数据 简单的时间获取服务端 Unix 标准 从一个简单的时间获取客户端开始 接下来&#xff0c;将从一个使用 TCP 连接的获取时间的客户端开始。 // 以下代码与 UNP intro/dayt…

后台管理项目重构为vue3.0

目录前言&#xff1a;为什么要重构项目&#xff1f;重构的目的具体案例下载项目一. 为什么要重构后台管理项目二. 安装项目所需的vue3.0 插件三. 具体代码重构四. 在更改中遇到的bug总结前言&#xff1a; 我们平常玩的游戏有时需要更新出新的内容&#xff0c;我们的项目也需要…

组件化、模块化、集中式、分布式、服务化、面向服务的架构、微服务架构

目录 1.组件化与模块化 1.1.组件化 2.模块化 2.1.模块化和组件化的区别 3.集中式与分布式 3.1.集中式 3.2.分布式 4.服务化 5.面向服务的架构 5.1.什么是SOA 5.2.实现SOA 5.3.面向对象和面向服务的对比 6.微服务架构 6.1.SOA和微服务 7.总结 最近最火的词是什么…

1月份 GameFi 行业报告

Jan. 2023&#xff0c; DanielData Source&#xff1a; January Monthly GameFi Report在经历了艰难的一年之后&#xff0c;1 月是对加密货币市场最有利的月份。虽然可以说的大部分内容适用于其他看涨周期&#xff0c;但有几个统计数据令 1 月在区块链领域非常有趣。例如&#…

花3个月面过京东测开岗,拿个20K不过分吧?

背景介绍 计算机专业&#xff0c;代码能力一般&#xff0c;之前有过两段实习以及一个学校项目经历。第一份实习是大二暑期在深圳的一家互联网公司做前端开发&#xff0c;第二份实习由于大三暑假回国的时间比较短&#xff08;小于两个月&#xff09;&#xff0c;于是找的实习是在…

GPU并行效率问题——通过MPS提升GPU计算收益

现象描述使用V100_32G型号的GPU运行计算程序时&#xff0c;发现程序每5秒能够完成一次任务&#xff0c;耗费显存6G。鉴于V100 GPU拥有32G的显存&#xff0c;还有很多空闲&#xff0c;决定同时运行多个计算程序&#xff0c;来提升GPU计算收益。然而&#xff0c;这一切都是想当然…

Kotlin新手教程一(Kotlin简介及环境搭建)

目录一、 什么是Kotlin&#xff1f;二、为什么要使用Kotlin&#xff1f;三、使用IntelliJ IDEA搭建Kotlin四、Kotlin使用命令行编译一、 什么是Kotlin&#xff1f; Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言&#xff0c;它也可以被编译成为 JavaScript 源代码&…

IDEA入门安装使用教程

一、背景 作为一个Java开发者&#xff0c;有非常多编辑工具供我们选择&#xff0c;比如Eclipse、IntelliJ IDEA、NetBeans、Visual Studio Code、Sublime Text等等&#xff0c;这些有免费也有收费的&#xff0c;但是就目前市场占比来说普遍使用Eclipse和IntelliJ IDEA这两款主…

字节软件测试岗:惨不忍睹的三面,幸好做足了准备,月薪19k,已拿offer

我今年25岁&#xff0c;专业是电子信息工程本科&#xff0c;19年年末的时候去面试&#xff0c;统一投了测试的岗位&#xff0c;软件硬件都有&#xff0c;那时候面试的两家公司都是做培训的&#xff0c;当初没啥钱&#xff0c;他们以面试为谎言再推荐去培训这点让我特别难受。后…

让huggingface/transformers的AutoTokenizer从本地读词表

https://stackoverflow.com/questions/62472238/autotokenizer-from-pretrained-fails-to-load-locally-saved-pretrained-tokenizer

ArcGIS网络分析之构建网络分析数据集(一)

说明: 1. 本文主要用于演示网络分析服务的搭建过程。所以在此不会深入讨论网络分析服务的每一个细节,本文的目的就是让初学者学会使用网络分析服务进行基本的分析(主要针对后续的WEB开发):路径分析,最近设施点分析,以及服务区分析。 2.关于OD成本矩阵分析,多路径配送,…

如何解决 Python 错误 NameError: name ‘X‘ is not defined

Python“NameError: name is not defined”发生在我们试图访问一个未定义的变量或函数时&#xff0c;或者在它被定义之前。 要解决该错误&#xff0c;需要确保我们没有拼错变量名并在声明后访问它。 确保你没有拼错变量或函数 下面是产生上述错误的示例代码。 employee {na…

【MySQL进阶】SQL优化

&#x1f60a;&#x1f60a;作者简介&#x1f60a;&#x1f60a; &#xff1a; 大家好&#xff0c;我是南瓜籽&#xff0c;一个在校大二学生&#xff0c;我将会持续分享Java相关知识。 &#x1f389;&#x1f389;个人主页&#x1f389;&#x1f389; &#xff1a; 南瓜籽的主页…

论文阅读笔记《Common Visual Pattern Discovery via Spatially Coherent Correspondences》

核心思想 两组点集中共有的匹配区域通常具备两个特点&#xff1a;1.局部的特征相似&#xff1b;2.特征点在空间上的分布也相似。作者将候选匹配点对作为图的节点&#xff0c;将两种相似性统一到边的权重来表示。通过寻找图中稠密连接的子图来寻找两个点集中的匹配区域&#xff…

2023年浙江建筑特种工(施工升降机)真题题库及答案

百分百题库提供特种工&#xff08;施工升降机&#xff09;考试试题、特种工&#xff08;施工升降机&#xff09;考试预测题、特种工&#xff08;施工升降机&#xff09;考试真题、特种工&#xff08;施工升降机&#xff09;证考试题库等,提供在线做题刷题&#xff0c;在线模拟考…

大数据DataX(一):DataX的框架设计和插件体系

文章目录 DataX的框架设计和插件体系 一、DataX是什么

Python客户端使用SASL_SSL连接Kafka需要将jks密钥转换为pem密钥,需要转化成p12格式再转换pem才能适配confluent_kafka包

证书生成 生成证书以及jks参考以下文章 https://blog.csdn.net/qq_41527073/article/details/121148600 证书转换jks -> pem 需要转化成p12以下转换才能适配confluent_kafka包&#xff0c;直接jks转pem会报错不能使用&#xff0c;具体参考以下文章 https://www.ngui.cc/z…

我的Android启动优化—【黑白屏优化】

简述 在Android App使用过程中&#xff0c;对于应用的优化是一个加分项&#xff0c;举个例子&#xff0c;打开你的App需要2秒&#xff0c;人家0.5秒&#xff0c;这就是很大的用户体验上的优化。 问题的产生 在开发中&#xff0c;我们在启动app的时候&#xff0c;屏幕会出现一…

C语言之函数

函数不可嵌套定义&#xff0c;函数之间为平行关系#include<stdio.h> //比较大小 int max(int x,int y){int z;if(x>y){zx;}else{zy;}return z;//带返回值 }//不带参数 void help(void){printf("**********hello********\n"); }int main(){int num;nummax(3,…

Kubernetes集群编排工具helm3 工作学习记录

文章目录1. helm 介绍、组件、安装和目录结构1.1 helm 介绍1.2 helm 组件1.2.1 helm2 和 helm3 的区别1.3 helm 安装1.4 helm 目录结构2. 编写一个chart 和 helm3 内置对象讲解2.1 创建编写一个chart2.1.1 创建chart,引用内置对象的变量值2.1.2 helm通过各种类型chart包安装一个…