ajax快速配置

JS-Ajax快速创建

一、创建对象

XMLHttpRequest 对象

语法

let myAjax = new XMLHttpRequest();

二、设置请求行

方法 描述
open(method,url,async) 规定请求的类型、URL 以及是否异步处理请求。 method:请求的类型;GET 或 POST url:文件在服务器上的位置 async:true(异步)或 false(同步)

有两个参数true和false

当设置为true时,为异步,在执行异步请求时可以进行其他操作

当设置为false时,为同步,在执行异步请求时不可以进行其他操作

语法

myAjax.open('get', 'respon.php');

三、设置请求头

如果是GET请求可以不设置请求头,如果是post请求则需设置请求头为

语法

myAjax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

四、注册回调函数

onload 事件

onload 事件会在页面或图像加载完成后立即发生。

语法

myAjax.onload = function() {
                    console.log(myAjax.responseText);
                }

onreadystatechange 事件

当请求被发送到服务器时,我们需要执行一些基于响应的任务。

每当 readyState 改变时,就会触发 onreadystatechange 事件。

readyState 属性存有 XMLHttpRequest 的状态信息。

下面是 XMLHttpRequest 对象的三个重要的属性:

属性 描述
onreadystatechange 存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。
readyState 存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。 0: 请求未初始化 1: 服务器连接已建立 2: 请求已接收 3: 请求处理中 4: 请求已完成,且响应已就绪
status 200: "OK"404: 未找到页面

在 onreadystatechange 事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务。

当 readyState 等于 4 且状态为 200 时,表示响应已就绪:

xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }

五、请求主体发送

方法 描述
send(string) 将请求发送到服务器。 string:仅用于 POST 请求

语法

myAjax.send();

get请求

  • get请求将请求的数据可直接放入url中
  • 可以不设置请求头
  • send数据为空

例:

<script>
        document.querySelector('button').onclick = function() {
                let myAjax = new XMLHttpRequest();
                myAjax.open('get', 'respon.php?name=jack&wife=rose');
                myAjax.onload = function() {
                    console.log(myAjax.responseText);
                }
                myAjax.send(null);
            }
</script>

post请求

  • post请求将数据放入send中进行发送
  • 必须设置请求头
<script>
        document.querySelector('button').onclick = function() {
                let myAjax = new XMLHttpRequest();
                myAjax.open('post', 'respon.php');
                myAjax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');//必须设置请求头
                myAjax.onload = function() {
                    console.log(myAjax.responseText);
                }
                myAjax.send('name=jack&wife=rose');
            }
</script>

jQuery-Ajax快速创建

jQuery中有三个方法可用于创建Ajax

$.ajax()方法

语法

jQuery.ajax([settings])
参数 描述
settings 可选。用于配置 Ajax 请求的键值对集合。 可以通过 $.ajaxSetup() 设置任何选项的默认值。

该方法以对象形式传入参数,虽然参数众多,但最主要的几个记住就行

类型 默认值
url String 当前页地址。发送请求的地址。
type String ("GET")。请求方式 ("POST" 或 "GET"), 默认为 "GET"。注意:其它 HTTP 请求方法,如 PUT 和 DELETE 也可以使用,但仅部分浏览器支持。
data String 发送到服务器的数据。将自动转换为请求字符串格式。GET 请求中将附加在 URL 后。查看 processData 选项说明以禁止此自动转换。必须为 Key/Value 格式。如果为数组,jQuery 将自动为不同值对应同一个名称。如 {foo:["bar1", "bar2"]} 转换为 '&foo=bar1&foo=bar2'。大多数情况下为对象形式
dataType String 预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如 XML MIME 类型就被识别为 XML。在 1.4 中,JSON 就会生成一个 JavaScript 对象,而 script 则会执行这个脚本。随后服务器端返回的数据会根据这个值解析后,传递给回调函数。
success Function 参数:由服务器返回,并根据 dataType 参数进行处理后的数据;描述状态的字符串。
error Function 在请求出错时调用。传入 XMLHttpRequest 对象,描述错误类型的字符串以及一个异常对象(如果有的话)

例:

<script>
        $('button').first().click(function() {
            $.ajax({
                url: 'http://wthrcdn.etouch.cn/WeatherApi',
                type: 'get',
                dataType: 'xml',
                data: {
                    city: $('input').val()
                },
                dataType: 'xml',
                success: function(data, textStatus, jqXHR) {
                    console.log(data);
                    // console.log(textStatus);
                    // console.log(jqXHR);
                }
            })
        });
        $('button').eq(1).click(function() {
            $.ajax({
                url: 'http://wthrcdn.etouch.cn/weather_mini',
                type: 'get',
                dataType: 'json',
                data: {
                    city: $('input').val()
                },
                success: function(data) {
                    console.log(data);
                }
            });
        });
        $('button').eq(2).click(function() {
            $.ajax({
                url: 'http://api.tianapi.com/txapi/robot/index?key=e78bcf8306ac340a8771c253f3a98097',
                type: 'get',
                data: {
                    question: $('input').val()
                },
                success: function(data) {
                    console.log(data);
                }
            });
        });
    </script>

$.get()方法

定义和用法

get() 方法通过远程 HTTP GET 请求载入信息。

这是一个简单的 GET 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用 $.ajax。

语法

$(selector).get(url,data,success(response,status,xhr),dataType)
参数 描述
url 必需。规定将请求发送的哪个 URL。
data 可选。规定连同请求发送到服务器的数据。
success(response,status,xhr) 可选。规定当请求成功时运行的函数。 额外的参数: response - 包含来自请求的结果数据 status - 包含请求的状态 xhr - 包含 XMLHttpRequest 对象
dataType 可选。规定预计的服务器响应的数据类型。 默认地,jQuery 将智能判断。 可能的类型: "xml" "html" "text" "script" "json" "jsonp"

$.post() 方法

定义和用法

post() 方法通过 HTTP POST 请求从服务器载入数据。

语法

jQuery.post(url,data,success(data, textStatus, jqXHR),dataType)
参数 描述
url 必需。规定把请求发送到哪个 URL。
data 可选。映射或字符串值。规定连同请求发送到服务器的数据。
success(data, textStatus, jqXHR) 可选。请求成功时执行的回调函数。
dataType 可选。规定预期的服务器响应的数据类型。 默认执行智能判断(xml、json、script 或 html)。

Ajax返回数据处理

xml文件处理

部分网站的响应报文传输的是一些xml文件,对于此类文件在接受时应设置回调函数为

xhr.responseXML

xml文件与html文件类似,解析时可使用html元素解析方法,例:

<script>
        $(function() {
            $('button').click(function() {
                let xhr = new XMLHttpRequest();
                xhr.open('get', 'http://wthrcdn.etouch.cn/WeatherApi?city=' + $('input').val());
                xhr.onreadystatechange = function() {
                    if (xhr.readyState == 4 && xhr.status == 200) {
                        let weatherText = xhr.responseXML;
                        // console.log(weatherText.querySelector('city').innerHTML);
                        // console.log($(weatherText).find('city').text());
                        let showText = '';
                        showText += $(weatherText).find('city').text() + '--';
                        showText += $(weatherText).find('updatetime').text() + '--';
                        showText += $(weatherText).find('wendu').text() + '--';
                        showText += $(weatherText).find('fengli').text() + '--';
                        showText += $(weatherText).find('shidu').text() + '--';
                        $('h1').text(showText);
                    }
                }
                xhr.send(null);
            });
        });
</script>

json文件处理

现在大部分网站使用的是json进行数据传输,json需要重点记住的是

JSON.stringify()

  • JSON 通常用于与服务端交换数据。
  • 在向服务器发送数据时一般是字符串。
  • 我们可以使用 JSON.stringify() 方法将 JavaScript 对象转换为字符串。

JSON.parse()

  • JSON 通常用于与服务端交换数据。
  • 在接收服务器数据时一般是字符串。
  • 我们可以使用 JSON.parse() 方法将数据转换为 JavaScript 对象。

例如:

<script>
        $('button').click(function() {
            let xhr = new XMLHttpRequest();
            xhr.open('get', 'http://wthrcdn.etouch.cn/weather_mini?city=贵阳');
            xhr.onreadystatechange = function() {
                if (xhr.readyState == 4 && xhr.status == 200) {
                    let weatherText = JSON.parse(xhr.responseText);
                    console.log(weatherText);
                    let showText = '';
                    showText += '城市:' + weatherText.data.city;
                    showText += '--未来天气:' + weatherText.data.forecast[0].date;
                    $('h1').text(showText);
                }
            }
            xhr.send(null);
        });
</script>

Ajax返回数据原理

跨域概念

同源

一个完整的地址由协议名,ip地址,端口号组成,只要请求的地址和响应的地址中这三者相同,便称为同源

不同源

与同相反,只要三者中任意一个内容不同,便成为不同源

跨域

不同源的请求地址与响应地址请求数据便成为跨域

跨域方法

服务器添加响应头

通常来说,数据是不可以跨域发送请求的,前面用到的接口是因为服务器添加了一行方法

Access-Control-Allow-Headers: *

这是最简单的一种方法,加上这一行,便可以实现跨域请求了

jsonp

jsonp的原理是html中,可以通过src属性进行跨域请求,于是便可以在js中先定义一种方法来接收参数,然后在script中通过src来发送请求,服务器响应的数据将会以js的方式进行回送,这时定义的方法便可以执行,以达到接收数据的目的

jQuery的ajax方法中也可很方便的接收参数,加上

dataType: 'jsonp'

便可实现

posted @ 2021-09-08 11:53  JSW79  阅读(433)  评论(0编辑  收藏  举报
隐藏目录