Ajax请求参数传递方式、请求参数的格式、JSON.stringify()
一、请求参数传递的方式
1、GET 请求方式
GET 请求方式参数放置在请求地址中进行传递。
xhr.open('get', 'http://www.example.com?name=zhangsan&age=20');
传递GET 请求参数代码示例:
<html lang="en">
<head><meta charset="UTF-8"><title>Documenttitle>
head>
<body><input type="text" id="username"><input type="text" id="age"><input type="button" value="提交" id="btn"><script type="text/javascript">// 获取按钮元素var btn = document.getElementById('btn');// 获取姓名文本框var username = document.getElementById('username');// 获取年龄文本框var age = document.getElementById('age');// 为按钮添加点击事件btn.onclick = function () {// 创建ajax对象var xhr = new XMLHttpRequest();// 获取用户在文本框中输入的值var nameValue = username.value;var ageValue = age.value;// 拼接请求参数var params = 'username='+ nameValue +'&age=' + ageValue;// 配置ajax对象xhr.open('get', 'http://localhost:3000/get?'+params);// 发送请求xhr.send();// 获取服务器端响应的数据xhr.onload = function () {console.log(xhr.responseText)//表单提交值}}script>
body>
html>
2、POST 请求方式
POST请求参数放置在请求报文中进行传递,在 HTTP 请求和响应的过程中传递的数据块就叫报文,包括要传送的数据和一些附加信息,这些数据和信息要遵守规定好的格式。
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
xhr.send('name=zhangsan&age=20');
传递GET 请求参数代码示例:
<html lang="en">
<head><meta charset="UTF-8"><title>Documenttitle>
head>
<body><input type="text" id="username"><input type="text" id="age"><input type="button" value="提交" id="btn"><script type="text/javascript">// 获取按钮元素var btn = document.getElementById('btn');// 获取姓名文本框var username = document.getElementById('username');// 获取年龄文本框var age = document.getElementById('age');// 为按钮添加点击事件btn.onclick = function () {// 创建ajax对象var xhr = new XMLHttpRequest();// 获取用户在文本框中输入的值var nameValue = username.value;var ageValue = age.value;// 拼接请求参数var params = 'username='+ nameValue +'&age=' + ageValue;// 配置ajax对象xhr.open('post', 'http://localhost:3000/post');// 设置请求参数格式的类型(post请求必须要设置)xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');// 发送请求xhr.send(params);// 获取服务器端响应的数据xhr.onload = function () {console.log(xhr.responseText)//表单提交值}}script>
body>
html>
二、请求参数的格式
四种常见的post请求方式参数的格式:
1、背景
注:enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。默认地,表单数据会编码为 “application/x-www-form-urlencoded”

(1)、HTTP 协议是以 ASCII 码 传输,建立在 TCP/IP 协议之上的应用层规范。规范把 HTTP 请求分为三个部分:状态行、请求头、消息主体。
(2)、协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须 使用什么编码方式 。实际上,开发者完全可以自己决定消息主体的格式,只要最后发送的 HTTP 请求满足上面的格式就可以。
(3)、数据发送出去,还要服务端解析成功才有意义。一般服务端语言如 php、python 等,以及它们的 framework,都内置了自动解析常见数据格式的功能。服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。
2、开始介绍四种方式:
(1)、application/x-www-form-urlencoded
这应该是最常见的 POST 提交数据的方式了。浏览器的原生 表单,如果不设置 enctype属性,那么最终就会以 application/x-www-form-urlencoded方式提交数据。
<form action="form_action.asp" enctype="text/plain"><p>First name: <input type="text" name="fname" /></p><p>Last name: <input type="text" name="lname" /></p><input type="submit" value="Submit" />
</form>
此时可以看到,
Content-Type: application/x-www-form-urlencoded;charset=utf-8
title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3
首先,Content-Type 被指定为 application/x-www-form-urlencoded;其次,提交的数据按照key1=val1&key2=val2的方式进行编码,key 和 val 都进行了 URL 转码。大部分服务端语言都对这种方式很好的支持,常用的如jQuery中的ajax请求,Content-Type默认值都是application/x-www-form-urlencoded;charset=utf-8
(2)、multipart/form-data
这也是常见的post请求方式,一般用来上传文件,各大服务器的支持也比较好。所以我们使用表单 上传文件 时,必须让表单的enctype属性值为 multipart/form-data.
注意:以上两种方式:application/x-www-form-urlencoded和multipart/form-data都是浏览器原生支持的。
(3)、application/json
application/json作为响应头并不陌生,实际上,现在很多时候也把它作为请求头,用来告诉服务端消息主体是序列化的JSON字符串,除了低版本的IE,基本都支持。除了低版本的IE都支持JSON.stringify()的方法,服务端也有处理JSON的函数,使用json不会有任何麻烦。
向服务器端传递JSON格式的请求参数示例:
<script type="text/javascript">// 1.创建ajax对象var xhr = new XMLHttpRequest();// 2.告诉Ajax对象要向哪发送请求,以什么方式发送请求// 1)请求方式 2)请求地址xhr.open('post', 'http://localhost:3000/json');// 通过请求头告诉服务器端客户端向服务器端传递的请求参数的格式是什么xhr.setRequestHeader('Content-Type', 'application/json');// JSON.stringify() 将json对象转换为json字符串// 3.发送请求xhr.send(JSON.stringify({name: 'lisi', age:50}));// 4.获取服务器端响应到客户端的数据xhr.onload = function (){console.log(xhr.responseText)}
</script>
注意:get 请求是不能提交 json 对象数据格式的,传统网站的表单提交也是不支持 json 对象数据格式的。
(4)、text/xml
三、JavaScript 标准内置对象JSON.stringify()
JSON对象包含两个方法: 用于解析 JavaScript Object Notation (JSON)的 parse()方法,以及将对象/值转换为 JSON字符串的 stringify()方法。除了这两个方法, JSON这个对象本身并没有其他作用,也不能被调用或者作为构造函数调用。
JSON.stringify()方法将一个 JavaScript 值(对象或者数组)转换为一个 JSON 字符串,如果指定了replacer是一个函数,则可以选择性地替换值,或者如果指定了replacer是一个数组,则可选择性地仅包含数组指定的属性。
JSON.stringify()学习指南:点击更多
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
