jQuery篇之AJAX(jQuery解决了AJAX不同浏览器兼容问题)

目录
    1. 原生 AJAX
    2. JQuery AJAX

AJAX(Asynchronous JavaScript and XML,异步JavaScript和XML)
局部更新网页,无需重新加载整个网页

1. AJAX原生使用
var xmlhttp;
if (window.XMLHttpRequest){ 
    // 大多数浏览器 code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
}else{
    // 旧版本IE code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

XMLHttpRequest 对象:AJAX 的基础,所有现代浏览器均支持。

onreadystatechange

/* readyState状态改变后就会调用
readyState
    0: 请求未初始化
    1: 服务器连接已建立
    2: 请求已接收
    3: 请求处理中
    4: 请求已完成,且响应已就绪
*/
xmlhttp.onreadystatechange=function(){
/*
收到响应后的处理方法:
状态文本
    xmlhttp.statusText
请求成功是否状态值(200,404)
    xmlhttp.status  
所有响应头
    xmlhttp.getAllResponseHeaders()
指定的响应头
    xmlhttp.getResponseHeader('Last-Modified')
状态值
    xmlhttp.readyState 见上
*/
  if (xmlhttp.readyState==4 && xmlhttp.status==200){
      // 以字符串形式获取
      xmlhttp.responseText;
      // 以xml形式获取
      xmlhttp.responseXML;      
    }else if(xmlhttp.status==404){  // 路径错误
    }
}

GET

简单也更快

// 设置(请求方式,请求路径,是否异步:绝大多数情况下:true),并发送请求
xmlhttp.open("GET","demo_get2.asp?fname=Bill&lname=Gates",true);
xmlhttp.send();

POST

// 可向服务器发送大量数据(POST 没有数据量限制)
xmlhttp.open("POST","ajax_test.asp",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("fname=Bill&lname=Gates");
2. JQuery AJAX

ajax (请求数据(最底层),默认:get方式)

  $.ajax({
    url:"https://www.imooc.com/data/check.php",
    data: { num: $("#txtNumber").val() },
    dataType:"text",
    success: function (data) {
      $("ul").append("<li>你输入的<b>  "
      + $("#txtNumber").val() + " </b>是<b> "
      + data + " </b></li>");
    }
  });

  htmlobj=$.ajax({url:"/jquery/test1.txt",async:false});
  $("#myDiv").html(htmlobj.responseText);

ajaxSetup (设置Ajax请求的公共 参数、函数回调)

jQuery.ajaxSetup([options])或$.ajaxSetup([options])
    设置Ajax请求的一些全局性选项值,设置完成后,后面的Ajax请求将不需要再添加这些选项值
             $.ajaxSetup({
                    dataType:"text",
                    success:function(data){
                        $("ul").append("<li>你输入的<b>  "
                            + $("#txtNumber").val() + " </b>是<b> "
                            + data + " </b></li>");
                    }
            });

            // 将不再需要设置dataType为text、success方法
            $.ajax({
                  data: { num: $("#txtNumber").val() },
                  url: "https://www.imooc.com/data/check.php"
            });    // 请求成功后会调用上面的success方法
            $.ajax({
                  data: { num: $("#txtNumber").val() },
                  url: "https://www.imooc.com/data/check.php"
            }); 

serialize (序列化表单元素值,生成标准URL编码文本字符串)

$("form").serialize()
    将表单中有name属性的元素值进行序列化,生成标准URL编码文本字符串,直接可用于ajax请求

生成数据格式:name=cx&sexSelect=0&LoveCheckbox=on
$("form").serializeArray();
  var params = { width:1900, height:1200 };
  var str = jQuery.param(params);

width=1900&height=1200

各种回调方法

  开始请求前调用  
  $("#txt").ajaxSend(function(e,xhr,opt){
    $(this).html("Requesting " + opt.url);
  });
  开始请求时调用
  $("#txt").ajaxStart(function(){
  });
  请求stop后调用
  $("#txt").ajaxStop(function(){
  });
  请求完成后调用
  $("#txt").ajaxComplete(function(){
  });
  请求出错时调用
  $("#txt").ajaxError(function(){
  });
  请求成功后调用
  $("#txt").ajaxSuccess(function(){
  });


例:
        <script type="text/javascript">
            $(function () {
                $("#btnShow").bind("click", function () {
                    var $this = $(this);
                    $.ajax({
                        url: "https://www.imooc.com/data/info_f.php",
                        dataType: "json",
                        success: function (data) {
                            $this.attr("disabled", "true");
                        $("ul").append("<li>我的名字叫:" + data.name + "</li>");
                        }
                    });
                })
                $("#divload").ajaxStart(function(){
                    $(this).html("正在请求数据...");
                });
                $("#divload").ajaxStop(function(){
                    $(this).html("数据请求完成!");
                });
            });
        </script>

避免和其他三方库冲突

重命名$为cx

var cx = $.noConflict();
cx(document).ready(function(){
  cx("button").click(function(){
    cx("p").text("hello");
  });
});

load(请求服务器数据(html内容),并把返回的数据显示到指定的元素中)

    $(selector).load(url,[data],[callback])
    参数:url,请求参数,获取数据后的回调(异步)

例:

    // 将获取到的结果加载到ul中,替换掉img,请求失败时为img
    $("ul").html("<img src='Images/Loading.gif' alt=''/>")
           .load("https://www.imooc.com/data/fruit_part.html",function(){
           });
    $("#div1").load("https://www.baidu.com",function(responseTxt,statusTxt,xhr){    
        // responseTxt,状态,XMLHttpRequest对象
        $(this).attr("disabled","true");
        if(statusTxt=="success")
          alert("外部内容加载成功!");
        if(statusTxt=="error")
          alert("Error: "+xhr.status+": "+xhr.statusText);
    });

getJSON (请求 JSON格式数据)

  jQuery.getJSON(url,[data],[callback])
  $.getJSON(url,[data],[callback])

例:

  $.getJSON("demo_ajax_json.js",function(result){
    $.each(result, function(i, field){
      $("div").append(field + " ");
    });
  });

getScript (请求并执行 js脚本文件)

jQuery.getScript(url,[callback])
$.getScript(url,[callback])

例:
  $.getScript("https://www.imooc.com/data/sport_f.js",function(){
  });

get(请求数据GET方式)

$.get(url,[callback])

例:
    $.get("demo_test.asp",function(data,status){
        alert("Data: " + data + "\nStatus: " + status);
    });

post (请求数据POST方式)

请求数据
$.post(url,[data],[callback])

例:(地址,参数,获得结果后)
    $.post("demo_test_post.asp",{
        name:"Donald Duck",
        city:"Duckburg"
      },function(data,status){
        alert("Data: " + data + "\nStatus: " + status);
      });
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容