[Ajax]ajax入门

原创 2013年12月05日 00:21:15

谈到ajax异步刷新技术,我之前感觉很高深,今天看了一下,大体上有一个了解,AJAX最大的应用就是我们要理解XMLHttpRequest这个对象。XMLHttpRequest可以提供不重新加载页面的情况下更新网页,在页面加载后在客户端向服务器请数 据, 在  页面加载后在服务器端接受数据,在后台向客户端发送数据。

关于ajax的详细叙述,可以参考这个博客:http://www.blogjava.net/tbwshc/archive/2012/07/24/383857.html

然后我贴出一些原始的ajax的例子,这样更方便了解ajax原理,解开他神奇的面纱,当然现在使用jQuery的ajax封装方法也非常方便。

例1:get请求

get.ashx:

<%@ WebHandler Language="C#" Class="_01_get" %>

using System;
using System.Web;

public class _01_get : IHttpHandler {
    
    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "text/plain";
        //int m = 0;
        //int n = 5 / m;
        
        //System.Threading.Thread.Sleep(3000);
        context.Response.Write(DateTime.Now.ToString());
    }
 
    public bool IsReusable {
        get {
            return false;
        }
    }

}

get.htm:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <script type="text/javascript">
        //注意问题
        //1 请求的路径中不要有中文
        //2 注意大小写
        //3 设置不读缓存
        //4 区分readyState XMLHttpRequest的状态  和status http的状态码
        
        //1 创建对象
        var xhr = createXHR();
        function createXHR() {
            var request;
            if (XMLHttpRequest) {
                request = new XMLHttpRequest();
            
            } else {
                request = new ActiveXObject("Microsoft.XMLHTTP");
            }
            return request;
        }
        function btn_click() {
            
            document.getElementById("d").innerHTML = "正在加载...";           
            //2 初始化     
            xhr.open("get", "01-get.ashx?_="+ Math.random(), true);
            //设置请求头 不读缓存
            //xhr.setRequestHeader("If-Modified-Since", "0");
       
            //3 注册事件
            xhr.onreadystatechange = function () {
                //判断接收服务器的响应完成后
                if (xhr.readyState == 4) {
                    //判断服务器返回的状态码 
                    if (xhr.status == 200) {
                        //获取服务器返回的响应
                        //xhr.responseText
                        //xhr.responseXML
                        document.getElementById("d").innerHTML = xhr.responseText;
                    } else {
                        document.getElementById("d").innerHTML = "服务器内部错误";
                    }
                }
            }
            //4 发送请求
            xhr.send();
        }
        
    </script>
</head>
<body>
    <input type="button" value="get" onclick="btn_click()" />

    <div id="d"></div>
</body>
</html>

例2:post请求提交保单

post.ashx:

<%@ WebHandler Language="C#" Class="_02_post" %>

using System;
using System.Web;

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

        string name = context.Request.Form["n"];
        string pwd = context.Request.Form["p"];
        if (name == "admin" && pwd == "admin")
        {
            context.Response.Write(1);
        }
        else
        {
            context.Response.Write(0);
        }
    }
 
    public bool IsReusable {
        get {
            return false;
        }
    }

}


post.htm:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <script type="text/javascript">
        //1 创建对象
        var xhr = createXHR();
        function createXHR() {
            var request;
            if (XMLHttpRequest) {
                request = new XMLHttpRequest();
            } else {
                request = new ActiveXObject("Microsoft.XMLHTTP");
            }
            return request;
        }
        function btn_click() {
            var name = my$("txtName").value;
            var pwd = my$("txtPwd").value;
            var data = "n=" + name + "&p=" + pwd;
            
            //2
            xhr.open("post", "02-post.ashx", true);
            //!------------------!注意
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            //3
            xhr.onreadystatechange = function () {
                if (xhr.readyState == 4) {
                    if (xhr.status == 200) {
                        var m = xhr.responseText;
                        if (m == 1) {
                            my$("msg").innerHTML = "登录成功";
                        } else {
                            my$("msg").innerHTML = "登录失败";
                        }
                    } else {
                        my$("msg").innerHTML = "服务器内部错误";
                    }
                }
            }
            //4
            xhr.send(data);
        }

        function my$(id) {
            return document.getElementById(id);
        }
    </script>
</head>
<body>
    <input type="text" id="txtName" /><br />
    <input type="text" id="txtPwd" /><br />
    <input type="button" value="Login" onclick="btn_click()" />
    <span id="msg"></span>
</body>
</html>

例3:省市选择效果

pro.ashx:

<%@ WebHandler Language="C#" Class="_06_pro" %>

using System;
using System.Web;
using System.Collections.Generic;
using System.Text;
public class _06_pro : IHttpHandler {
    
    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "text/plain";
        string s = context.Request.QueryString["pid"];
        int pid;
        if (int.TryParse(s, out pid))
        { 
            //json形式的字符串
            string json = GetDataByPId(pid);
            context.Response.Write(json);
        }
        else    
        {
            context.Response.Write("[]");
        }
    }
    private string GetDataByPId(int pid)
    {
        List<Data> list = GetAllDatas();

        List<Data> wantedList = new List<Data>();
        foreach (Data data in list)
        {
            if (data.Pid == pid)
            {
                wantedList.Add(data);
            }
        }
        
        //拼json形式的字符串   
         //[{ "Id": 1, "Name": "河北省", "PId": 0 },
         //            { "Id": 2, "Name": "日本省", "PId": 0 },
         //            { "Id": 3, "Name": "台湾省", "PId": 0 }
         // ]
        StringBuilder sb = new StringBuilder();
        sb.Append("[");

        foreach (Data data in wantedList)
        {
            sb.Append("{ \"Id\": "+data.Id+", \"Name\": \""+data.Name+"\", \"PId\": "+data.Pid+" },");
        }
        sb.Remove(sb.Length - 1, 1);
        sb.Append("]");
        return sb.ToString();
    }
    
    /// <summary>
    /// 模拟从数据库中加载数据,返回泛型集合
    /// </summary>
    /// <returns></returns>
    private List<Data> GetAllDatas()
    {
        List<Data> list = new List<Data>();

        list.Add(new Data() { Id = 1, Name = "河北省", Pid = 0 });
        list.Add(new Data() { Id = 2, Name = "台湾省", Pid = 0 });
        list.Add(new Data() { Id = 3, Name = "日本省", Pid = 0 });


        list.Add(new Data() { Id = 4, Name = "石家庄", Pid = 1 });
        list.Add(new Data() { Id = 5, Name = "邯郸市", Pid = 1 });
        list.Add(new Data() { Id = 6, Name = "邢台市", Pid = 1 });

        list.Add(new Data() { Id = 7, Name = "高雄市", Pid = 2 });
        list.Add(new Data() { Id = 8, Name = "台北", Pid = 2 });
        list.Add(new Data() { Id = 9, Name = "台中", Pid = 2 });

        list.Add(new Data() { Id = 10, Name = "东京", Pid = 3 });
        list.Add(new Data() { Id = 11, Name = "冲绳", Pid = 3 });
        list.Add(new Data() { Id = 12, Name = "大阪", Pid = 3 });
        return list;
    }
    public bool IsReusable {
        get {
            return false;
        }
    }

}

pro.htm:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <script src="ajax.js" type="text/javascript"></script>
    <script type="text/javascript">
        window.onload = function () {
            loadProvince();

            
        }
        function loadProvince() {
            var province = my$("province");
            //发送异步请求获取省的数据
            ajax("get", "06-pro.ashx?pid=0", null, function (s) {
                //把字符串转化成对象
                var array = eval(s);
                for (var i = 0; i < array.length; i++) {
                    var json = array[i];
                    var option = document.createElement("option");
                    option.innerHTML = json.Name;
                    option.value = json.Id;
                    province.appendChild(option);
                }
                //当省加载完,再加载市
                loadCity();

            }, function () {
                alert("服务器内部错误");
            });
        }

        function loadCity() {
            var pid = my$("province").value;
            var city = my$("city");
            //清空下拉框
            city.innerHTML = "";

            ajax("get", "06-pro.ashx?pid=" + pid, null, function (s) {
                //把字符串转化成对象
                var array = eval(s);
                for (var i = 0; i < array.length; i++) {
                    var json = array[i];
                    var option = document.createElement("option");
                    option.innerHTML = json.Name;
                    option.value = json.Id;
                    city.appendChild(option);
                }
            }, function () {
                alert("服务器内部错误");
            });
        }

    </script>
</head>
<body>
    <select id="province" onchange="loadCity()">
    </select>
    <select id="city">
    </select>
</body>
</html>

自己封装的ajax:

function my$(id) {
    return document.getElementById(id);
}

var xhr = createXHR();
function createXHR() {
    var request;
    if (XMLHttpRequest) {
        request = new XMLHttpRequest();

    } else {
        request = new ActiveXObject("Microsoft.XMLHTTP");
    }
    return request;
}

function ajax(method,url,data,fnSuccess,fnError) {

    xhr.open(method, url, true);
    if (method == "post") {
        //!------------------!注意
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    }
    xhr.onreadystatechange = function () {
        if (xhr.readyState == 4) {
          
            if (xhr.status == 200) {
                var s = xhr.responseText;
                fnSuccess(s);
            } else {
                fnError();
            }
        }
    }
    xhr.send(data);
}

这里要感谢刘兄的指导,在此鸣谢!

==================== 迂者 丁小未 CSDN博客专栏=================

MyBlog:http://blog.csdn.net/dingxiaowei2013             MyQQ:1213250243

Unity QQ群:858550         cocos2dx QQ群:280818155

====================== 相互学习,共同进步 ===================

转载请注明出处:http://blog.csdn.net/dingxiaowei2013/article/details/17130553

欢迎关注我的微博:http://weibo.com/u/2590571922


版权声明:本文为博主原创文章,未经博主允许不得转载。Unity交流群:159875734 举报

相关文章推荐

Ajax入门学习

Ajax主要来实现局部刷新的。 这是一个项目: AjaxTest.java(Servlet) import javax.servlet.ServletException; import javax.s...

【AJAX】AJAX入门基础

一、AJAX简介: AJAX=Asynchronous JavaScript and XML(异步的JavaScript和XML)。AJAX不是新的编程语言,而是一种使用现有标准的新方法,AJAX通...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

AJAX入门---AJAX操作HTML

AJAX入门---DOM操作HTML          一边学习AJAX一边坐着总结加深印象,上次写的是如何简单的使用XMLHttpRequest对象,今天写的是DOM(文档对象模型(Documen...

【AJAX】AJAX入门指南

【是什么】         AJAX,即Asynchronous Javascript And XML,异步JavaScript和XML。AJAX是一种用来改善用户体验的技术,其本质是利用浏览器...

AJAX入门

对于的一个工作的人来说当你接触到ajax的时候,你会发现除了可以用表单提交数据以外,没想到还可以用ajax提交数据,而且页面不用刷新,只改变了自己想要改变的一部分,你就会有点喜欢上它了,没错这就是aj...

AJAX入门

简介       AJAX(Asynchronous Javascript And XML),即“异步JavaScript和XML",是一种创建交互式网页应用的网页开发技术,通过在后台与服务器进行少量...

AJAX入门

XMLHttpRequest function getHTTPObject(){   var  } open() url data 接收:OnReadyStatusChange ...

Ajax-入门

开始这篇文章将带您浏览整个AJAX的基本概貌,并展示两个简单的例子让您轻松上路.

ajax入门

前言总括: 本文讲解了ajax的历史,工作原理以及优缺点,对XMLHttpRequest对象进行了详细的讲解,并使用原生js实现了一个ajax对象以方便日常开始使用。 damonare的ajax库:d...

ajax入门

一、使用Ajax的主要原因  1、通过适当的Ajax应用达到更好的用户体验;   2、把以前的一些服务器负担的工作转嫁到客户端,利于客户端闲置的处理能力来处理,减轻服务器和带宽的负担,从而达到节约IS...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)