ajax

ajax基本概念:

    不刷新页面,偷偷和服务器进行交互(使用http协议找服务器要数据)

    必须的参数:

               请求的服务器的url

               请求的方式

               传递的数据(如果没有,可以留空)

               点击发送数据

               接收服务器返回的结果

               浏览器渲染为图形界面

1.form 表单提交数据

  action属性:数据提交的url

  method属性:表单提交的方式有两种,默认是get(可以不设置),另外一种是post

         get:get提交的数据会在url中看到,获取数据需要通过$_GET

                 提交的数据是有长度限制的,因为数据都在url中

         post:post提交的数据在url中看不到,获取数据需要通过$_POST(post比get安全一点点)

                 提交的数据长度一般是没有限制的(还可以在服务端进行修改),可以上传文件

                 如果是上传文件$_POST只能获取到上传文件的名字,获取不到文件

                 $_FILES来获取上传文件,form扁担要设置enctype,默认值是application/x-www-form-urlencoded(用于上传普通的文本值),如果上传文件要设置为multipart/form-data

  submit:进行提交(想要提交数据,需要通过表单元素的name属性)

2.上传文件注意:

   浏览器:form:method=post

                        enctype=multipart/form-data

                        input type=file name='xx'

   服务器:php:$_FILES获取关系型数组

                                使用key来获取内部的关系型数组

                                使用name获取文件名

                                使用tmp_name获取路径

                     move_uploaded_file()移动上传文件(是一个临时文件),否则会被系统删除掉

3.ajax五大步骤

   1.创建异步对象

        var xhr=new XMLHttpRequest();

   2.设置请求的url以及请求方法

        xhr.open('get','url');

   3.发送请求

        xhr.send();

   4.注册回调事件

       xhr.onreadystatechange=function(){

          5.接受服务端返回的数据

           if(xhr.readyState==4&&xhr.status==200){

                 console.log(xhr.responseText)

           } 

       }

4.提交数据:

  get方法提交数据,需要自己在请求路径中手动拼接

         url+?+name=xxx&name=xxx 

         *:form表单中的name属性是必须的,ajax可以自己手动拼接

         *:form表单中设置自己需要的属性(自定义属性),通过data-name='xxx'  

              获取data-name的值通过dataset[‘name’]

 post方法提交数据 ,发送的数据要写在send中,同时还要设置http头

        xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");

        xhr.send('name=xxx&age=10') 

5.XML

       最顶部需要写一个xml的版本号<?xml version='1.0'?  encoding='UTF-8'>

       都是双标签

       可以自己随机定义标签(不要以数字开头、不要使用中文)

       必须包裹在一个顶级标签中,但是顶级标签的名字是可以自定义的

       标签是可以嵌套的

   获取xml

     如果不做任何设置仅仅只是读取并返回,那么xml就只是字符串而已

     *:服务端代码中需要使用header方法设置返回的内容是xml

              header('content-type:text/xml;charset=utf-8:')

     *  浏览器端ajax对象中获取返回的内容的属性是responseXML,获取的xml对象就是一个文档对项,可以使用document.querySelector()获取,

6.ajax中get方法和post方法封装:

//  ajax_get
function ajax_get() {
    // 1.创建
    var ajax = new XMLHttpRequest();

    // 2.open
    // 如果 有数据
    if (数据) {
        // 修改url 为 xxx.php?+数据
        请求的url= 请求的url+"?"+数据;
        ajax.open('get',请求的url)
    }
    else{
        // 如果 没有数据
        ajax.open('get',请求的url);
    }

    // 3.send
    ajax.send();

    // 4.事件
    ajax.onreadystatechange = function () {
        // 5.判断并使用
        if (ajax.readyState ==4&&ajax.status==200) {
            console.log(ajax.responseText);
        }
    }

}


// ajax_post
function ajax_post() {
    // 1.创建
    var ajax = new XMLHttpRequest();
    // 2.open
    ajax.open('post',请求的url);

    // 设置 content-type
    ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded");

    // 3.send
    ajax.send(发送的数据)

    // 4.事件
    ajax.onreadystatechange = function () {
        // 5.判断并使用
        if (ajax.readyState==4&&ajax.status==200) {
            console.log(ajax.responseText);
        }
    }

    
}


// 将get 跟post进行合并
/*
    思路分析
*/
function ajax_chinese_parm() {
    // 1.创建
    var ajax = new XMLHttpRequest();

    // 判断 请求的方法
    if (方法=='get') {
        // 判断 是否需要传递数据
        if (数据) {
            // xxx.php?name=jack
            请求的url+='?';
            请求的url+=数据

            // open 并发送
            ajax.open(方法,请求的url);
            ajax.send();
        }else{
            //没有数据 直接url即可
            ajax.open(方法,请求的url);
            ajax.send();
        }
    }else{
        // 2.open
        ajax.open(方法,请求的url);

        // 设置 content-type
        ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded");

        // 3.send
        ajax.send(发送的数据)
    }

    // 4.事件
    ajax.onreadystatechange = function () {
        // 5.判断并使用
        if (ajax.readyState==4&&ajax.status==200) {
            console.log(ajax.responseText);
        }
    }
}

// 将get 跟post进行合并
/*
优化参数的传递 用户只需要 传递一个 参数即可
改参数是对象
工具函数中 直接使用 对象的属性即可
将 中文内容 替换为 对应的 参数
参数1:method 请求的方法
参数2:data 发送的数据
参数3:url 请求的url
参数4;success 请求成功之后 调用的 函数
*/
function ajax_total(option) {
// 1.创建
var ajax = new XMLHttpRequest();


// 判断 请求的方法
if (option.method=='get') {
// 判断 是否需要传递数据
if (option.data) {
// xxx.php?name=jack
option.url+='?';
option.url+=option.data


// open 并发送
ajax.open(option.method,option.url);
ajax.send();
}else{
//没有数据 直接url即可
ajax.open(option.method,option.url);
ajax.send();
}
}else{
// 2.open
ajax.open(option.method,option.url);


// 设置 content-type
ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded");


// 3.send
ajax.send(option.data)
}


// 4.事件
ajax.onreadystatechange = function () {
// 5.判断并使用
if (ajax.readyState==4&&ajax.status==200) {
// console.log(ajax.responseText);


// 调用 作为 参数 传递进来的 success
option.success(ajax.responseText);


}
}
}



// 将 自己封装的方法 添加到 一个对象中
/*
提醒用户 不要定义my_$
1.不会被轻易的覆盖
2.添加多个
调用的时候 比较统一
my_$.ajax_total
my_$.ajax_get
my_$.ajax_post


命名空间:
my_$ 在这里 称之为 命名空间
*/
var my_$ = {
ajax_total:function(option){
// 1.创建
var ajax = new XMLHttpRequest();


// 判断 请求的方法
if (option.method=='get') {
// 判断 是否需要传递数据
if (option.data) {
// xxx.php?name=jack
option.url+='?';
option.url+=option.data


// open 并发送
ajax.open(option.method,option.url);
ajax.send();
}else{
//没有数据 直接url即可
ajax.open(option.method,option.url);
ajax.send();
}
}else{
// 2.open
ajax.open(option.method,option.url);


// 设置 content-type
ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded");


// 3.send
ajax.send(option.data)
}


// 4.事件
ajax.onreadystatechange = function () {
// 5.判断并使用
if (ajax.readyState==4&&ajax.status==200) {
// console.log(ajax.responseText);


// 调用 作为 参数 传递进来的 success
option.success(ajax.responseText);


}
}
}
}

 

 7.jquery中的ajax

         get方法:$.get(url,data,callback,type(json))

                   *:data为对象时,浏览器会帮我们解析成字符串拼接到url中

         post 方法:$.post(url,data,callback,type)

         ajax:$.ajax({

                  url:'xxx.php',

                  type:'post'(默认是get方法),

                  data:{name:'jack'}(对象格式),

                  success:function(backData){

                               

                             },

                  dataType:'json'(如果设置为json,返回的内容不是json,也是不会触发请求成功                                 的回调事件的 )

                })

       

原文地址:https://www.cnblogs.com/luxiaoxiao/p/6363991.html