`
Janne
  • 浏览: 44128 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

ajax

阅读更多
<script type="text/javascript" src="js/1.11.1.js"></script>           
 //jquery导包
<script type="text/javascript">
 $(function(){
  $("#login").click(function(){                             //登陆按钮
  if ($("#username").val()==""|| $("#username").val()==null) {                //判断账号是否为空
$("#pwdMsg").text("账号密码不能为空");                         //如果空给提示,返回false打断提交
return false;
	}
	if ($("#password").val()==""|| $("#password").val()==null) {              //判断密码是否为空
$("#pwdMsg").text("账号密码不能为空"); //如果空给提示,返回false打断提交
return false;
	}
  $.ajax({
    type: "POST",
    url: "LoginServlet",            //提交的目的地
  data: {username:$("#username").val(),password:$("#password").val()},
  dataType :"xml",
  success: function(msg){
  var message=msg.getElementsByTagName("result")[0].firstChild.nodeValue;
  if(message=="success"){
  window.location.href="login_success.jsp";
  }else{
  $("#username").val("");
  $("#password").val("");
  $("#pwdMsg").html(message);
  }
   }
}); 
  });
 });
</script> 


 

 

基于jQueryAJAXJSON

jQuery内置的AJAX功能,直接访问后台JSON格式的数据,然后通jQuer把数据定到事先设计好的html模板上,直接在面上示。 

先来看一下html模板:

 

 <table id="datas" border="1" cellspacing="0" style="border-collapse: collapse">
                <tr>
                    <th>
                        订单ID</th>
                    <th>
                        客户ID</th>
                    <th>
                        雇员ID</th>
                    <th>
                        订购日期</th>
                    <th>
                        发货日期</th>
                    <th>
                        货主名称</th>
                    <th>
                        货主地址</th>
                    <th>
                        货主城市</th>
                    <th>
                        更多信息</th>
                </tr>
                <tr id="template">
                    <td id="OrderID">
                    </td>
                    <td id="CustomerID">
                    </td>
                    <td id="EmployeeID">
                    </td>
                    <td id="OrderDate">
                    </td>
                    <td id="ShippedDate">
                    </td>
                    <td id="ShippedName">
                    </td>
                    <td id="ShippedAddress">
                    </td>
                    <td id="ShippedCity">
                    </td>
                    <td id="more">
                    </td>
                </tr>
            </table>

 

 

一定要注意的就是里面所有的id属性,个是一个关键。再来看一下AJAX求和定数据的代

<!--EndFragment-->

$.ajax({
          type: "get",//使用get方法访问后台
            dataType: "json",//返回json格式的数据
            url: "BackHandler.ashx",//要访问的后台地址
           data: "pageIndex=" + pageIndex,//要发送的数据            
       complete :function(){$("#load").hide();},//AJAX请求完成时隐藏loading提示
           success: function(msg){//msg为返回的数据,在这里做数据绑定
              var data = msg.table;
              $.each(data, function(i, n){
                   var row = $("#template").clone();
                    row.find("#OrderID").text(n.订单ID);
                    row.find("#CustomerID").text(n.客户ID);
                    row.find("#EmployeeID").text(n.雇员ID);
                    row.find("#OrderDate").text(ChangeDate(n.订购日期));
                    if(n.发货日期!== undefined) row.find("#ShippedDate").text(ChangeDate(n.发货日期));
                    row.find("#ShippedName").text(n.货主名称);
                    row.find("#ShippedAddress").text(n.货主地址);
                    row.find("#ShippedCity").text(n.货主城市);
 row.find("#more").html("<a href=OrderInfo.aspx?id=" + n.订单ID + "&pageindex="+pageIndex+">&nbsp;More</a>");                    
                    row.attr("id","ready");//改变绑定好数据的行的id
                    row.appendTo("#datas");//添加到模板的容器中
                });

 

 

 

个是jQueryAJAX方法,返回数据并不复杂,主要明一下怎把数据按模板的定义显示到到面上。首先是var row = $("#template").clone();先把模板制一份,接下来row.find("#OrderID").text(n.订单ID);,表示找到id=OrderID标记置它的innerText的数据,当然也可以html格式的数据。或者是通外部的函数把数据转换成需要的格式,比如row.find("#OrderDate").text(ChangeDate(n.订购日期));有点服器控件做模板定数据的感

     所有的些,都是放在一个静面里,只通AJAX方法从后台取数据,所有html如下

 

 

 

<!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>test1</title>

    <script language="javascript" type="text/javascript" src="js/jquery-latest.pack.js"></script>

    <script language="javascript" type="text/javascript" src="js/PageDate.js"></script>

</head>
<body>
    <div>
        &nbsp;<div>
            <br />
            <input id="first" type="button" value="  <<  " /><input id="previous" type="button"
                value="  <  " /><input id="next" type="button" value="  >  " /><input id="last" type="button"
                    value="  >>  " />
            &nbsp;<span id="pageinfo"></span>
            <table id="datas" border="1" cellspacing="0" style="border-collapse: collapse">
                <tr>
                    <th>
                        订单ID</th>
                    <th>
                        客户ID</th>
                    <th>
                        雇员ID</th>
                    <th>
                        订购日期</th>
                    <th>
                        发货日期</th>
                    <th>
                        货主名称</th>
                    <th>
                        货主地址</th>
                    <th>
                        货主城市</th>
                    <th>
                        更多信息</th>
                </tr>
                <tr id="template">
                    <td id="OrderID">
                    </td>
                    <td id="CustomerID">
                    </td>
                    <td id="EmployeeID">
                    </td>
                    <td id="OrderDate">
                    </td>
                    <td id="ShippedDate">
                    </td>
                    <td id="ShippedName">
                    </td>
                    <td id="ShippedAddress">
                    </td>
                    <td id="ShippedCity">
                    </td>
                    <td id="more">
                    </td>
                </tr>
            </table>
        </div>
        <div id="load" style="left: 0px; position: absolute; top: 0px; background-color: red">
            LOADING....
        </div>
        <input type="hidden" id="pagecount" />
    </div>
</body>
</html>

 PageData.js就是包括上面AJAX请求和绑定数据代码的js,整个页面连form都不用,这样做有什么好处呢。再看下面一个模板

 

 

 

 

 

<ul id="datas">
                <li id="template">
                    <span id="OrderID">
                        fsdfasdf
                    </span>
                    <span id="CustomerID">
                    </span>
                    <span id="EmployeeID">
                    </span>
                    <span id="OrderDate">
                    </span>
                    <span id="ShippedDate">
                    </span>
                    <span id="ShippedName">
                    </span>
                    <span id="ShippedAddress">
                    </span>
                    <span id="ShippedCity">
                    </span>
                    <span id="more">
                    </span>
                </li>
            </ul>

 

 

还是要注意id属性。大家看到这里应该明白了,不管用什么样的表现形式,只要id属性相同,就可以把数据绑定到对应的位置。这样的话,我们这些做程序的就不 会因为美工的修改而修改代码了,而且美工也只要做出html就可以了,不需要为服务器控件做模板(不过我还没遇到过这样的美工,都是美工设计好了我来改成 服务器控件的模板)。

    

再简单说一下AJAX请求的后台,用的是Access的Northwind数据库,把订单表放到DataTable里,然后通过DataTable2JSON转化成JSON数据格式传回来就完了,不过后台用了一些分页和缓存的方法,希望对初学者有一些帮助。

全部例子到http://files.cnblogs.com/fredlau/JSON.rar下载

    参考资料: http://files.cnblogs.com/fredlau/JSON.pdf 

ajaxjson数据 

<!--EndFragment-->

 

JS代码

1.首先建立json.txt文件

{   
"programmers": [   
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },   
{ "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" },   
{ "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }   
],   
"authors": [   
{ "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },   
{ "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },   
{ "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }   
],   
"musicians": [   
{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },   
{ "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }   
]   
}

 2.通过异步调用来读取json数据 

<html xmlns="http://www.w3.org/1999/xhtml" >   
<head runat="server">   
<script type="text/javascript">   
var xmlHttp;   
function createXMLHttpRequest()   
{   
    if(window.ActiveXObject)   
    {   
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");   
    }   
    else if(window.XMLHttpRequest)   
    {   
        xmlHttp = new XMLHttpRequest();   
    }   
}   
function startRequest()   
{   
    createXMLHttpRequest();   
    try  
    {   
        xmlHttp.onreadystatechange = handleStateChange;   
        xmlHttp.open("GET", "Json.txt", true);   
        xmlHttp.send(null);   
    }   
    catch(exception)   
    {   
        alert("xmlHttp Fail");   
    }   
}   
function handleStateChange()   
{      
    if(xmlHttp.readyState == 4)   
    {          
        if (xmlHttp.status == 200 || xmlHttp.status == 0)   
        {   
            var result = xmlHttp.responseText;   
            var json = eval("(" + result + ")");   
            alert(json.programmers[0].firstName);//读取json数据   
            //alert(json.sex);   
        }   
    }   
}   
</script>   
</head>   
<body>   
    <div>   
       <input type="button" value="AjaxTest" onclick="startRequest();" />   
    </div>   
</body>   
</html>  

 

 

AjaxJSON的一些总结

 1.1.1 摘要

  Ajax的核心是XMLHttpRequest象(XHR),可以通使用XHR取到服器的数据,然后再通DOM将数据插入到面中呈然名字中包含XML,但Ajax与数据格式无,所以我的数据格式可以是XMLJSON等格式。

  XMLHttpRequest象用于在后台与服器交数据,具体作用如下:

<!--[if !supportLists]-->· <!--[endif]-->在不重新加载页面的情况下更新网

<!--[if !supportLists]-->· <!--[endif]-->面已加后从服求数据

<!--[if !supportLists]-->· <!--[endif]-->面已加后从服器接收数据

<!--[if !supportLists]-->· <!--[endif]-->在后台向服送数据

  本文目

<!--[if !supportLists]-->· <!--[endif]-->XMLHttpRequest的用法

<!--[if !supportLists]-->· <!--[endif]-->Ajax同源

<!--[if !supportLists]-->· <!--[endif]-->同源策略与跨源策略

<!--[if !supportLists]-->· <!--[endif]-->Ajax跨源

  1.1.2 正文

  XMLHttpRequest是一个JavaScript象,它是由微软设计,并且被MozillaAppleGoogleW3C正在准化它。它提供了一种简单的方法来URL中的数据。

  我建一个XMLHttpRequest例,只需new一个就OK了:

<!--EndFragment-->

//// Creates a XMLHttpRequest object.
var req = new XMLHttpRequest();

 

    也有人会可不行啊!IE6不支持原始的XHR,确这样,我在后面将会介支持IE6或更老版本XHR象的方法。

<!--EndFragment-->

  

  

 

XMLHttpRequest的用法

  在XHR象后,接着我用一个初始化方法open(),它接受五个参数具体定

 

void open(
   DOMString method, //"GET", "POST", "PUT", "DELETE"
   DOMString url,
   optional boolean async,
   optional DOMString user,
   optional DOMString password
);

 

   通上面的定知道open()方法的名包含五个参数,其中有参数methodurl地址是必填的,假们针对URL: myxhrtest.aspxGET取数据,具体定如下:

<!--EndFragment--> 

var req = new XMLHttpRequest();
req.open(
    "GET",
    "myxhrtest.aspx",
    false
);

 

上述代会启一个针对myxhrtest.aspxGET求,里有两点要注意:一是URL行代的当前面(使用绝对路径);二是open()方法并不会真正求,而只是启一个求准备发送。

只能向同一个域中使用相同端口和协议URL求;如果URL与启动请求的面有任何差,都会引安全错误

  要真正求要使用send()方法,send()方法接受一个参数,即要作为请求主体送的数据,如果不需要通过请求主体送数据,我须传递一个null。在send()之后,求就会被分派到服器,完整Ajax求代如下:

<!--EndFragment--> 

var req = new XMLHttpRequest();
req.open(
    "GET",
    "myxhrtest.aspx",
    false
);
req.send(null);

 

 

求之后,我需要检查请求是否行成功,首先可以通status属性判断,一般来,可以将HTTP码为200成功志。这时

主体内容会保存到responseText中。此外,状码为304表示求的源并没有被修改,可以直接使用浏览存的数据,Ajax的同步请求代如下

if (req != null) {
        req.onreadystatechange = function() {
            if ((req.status >= 200 && req.status < 300) || req.status == 304) {
                //// Do something.
            } else {
                alert("Request was unsuccessful: " + req.status);
            }
    };
    req.open("GET", "www.myxhrtest.aspx", true);
    req.send(null);
}

 

 

前面我Ajax的同步请求,如果我们发送异步请求,那程中javascript继续执行,这时可以通readyState属性判断求的状

readyState = 4,表示收到全部响数据,属性的定如下:

见图片描述

 

步请求:求后,要等待服行完继续执行当前代

步请求:求后,无需等到服行完,可以继续执行当前代

  在我要增加判断readyState属性,当readyState = 4,表示全部数据接收完成, 所以Ajax的异步请求代如下:

<!--EndFragment-->

if (req != null) {
    req.onreadystatechange = function() {
        //// Checks the asyn request completed or not.
        if (req.readyState == 4) {
            if ((req.status >= 200 && req.status < 300) || req.status == 304) {
                //// Do something.
            } else {
                alert("Request was unsuccessful: " + req.status);
            }
        }

 

 

Ajax同源

  在我们对Ajax实现有了初的了解,接下来我将通具体的例子Ajax求的合和局限。

 

  在日常网生活中,我浏览器的地址中入要访问URL并且回浏览器会向服求,当服器收到求后,把相送回浏览器,我发现页面大部分加,有些没有加的来,采用异方式不会影响已加浏览,我可以通Ajax实现

 

  里我AdventureWorks数据库为例,把品表(Product)中的数据通过报表呈现给,我可以通方法实现该报表需求,里我将通Ajax实现该功能。

  首先,我要把后台数据转换为JSON格式,接下来我Product表的数据库访问对象(DAO),具体的实现如下:

 

// <summary>
/// The product datatable dao.
/// </summary>
public class ProductDao
{
/// <summary>
    /// Initializes a new instance of the <see cref="ProductDao"/> class.
    /// </summary>
    public ProductDao()
    {
    }
    /// <summary>
    /// Gets or sets the product id.
    /// </summary>
    public int Id { get; set; }
    /// <summary>
    /// Gets or sets the product name.
    /// </summary>
    public string Name { get; set; }
    /// <summary>
    /// Gets or sets the product serial number.
    /// </summary>
    public string SerialNumber { get; set; }
    /// <summary>
    /// Gets or sets the product qty.
    /// </summary>
    public short Qty { get; set; }
}

 

 

前面我Product表的数据库访问对——ProductDao,它包含四个属性分品的Id,名称,序列号和售数量。

  接下来,们实现Product表的数据操作

<!--EndFragment-->

 

// <summary>
/// Product table data access manager.
/// </summary>
public class ProductManager
{
    /// <summary>
    /// The query sql.
    /// </summary>
    private const string Query = 
        "SELECT ProductID, Name, ProductNumber, SafetyStockLevel FROM Production.Product";
    /// <summary>
    /// Stores the object of <see cref="ProductDao"/> into list.
    /// </summary>
    private IList<ProductDao> _products = new List<ProductDao>();
    /// <summary>
    /// Gets all products in product table.
    /// </summary>
    /// <returns>
    /// The list of <see cref="ProductDao"/> object.
    /// </returns>
    public IList<ProductDao> GetAllProducts()
    {
        using (var con = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLCONN"].ToString()))
        using (var com = new SqlCommand(Query, con))
        {
            con.Open();
            using (var reader = com.ExecuteReader(CommandBehavior.CloseConnection))
            {
                while (reader.Read())
                {
                    var product = new ProductDao
                        {
                            Id = (int)reader["ProductID"],
                            Name = (string)reader["Name"],
                            SerialNumber = (string)reader["ProductNumber"],
                            Qty = (short)reader["SafetyStockLevel"]
                        };
                    _products.Add(product);
                }
            }
        }
        return _products;
    }
}

 

 

 前面我们实现Product表的数据操作——ProductManager,它包含两个私有字段Quey_products有一个Product表中数据的方法——GetAllProducts()

  通过实现ProductDaoProductManager,而且我提供GetAllProducts()方法,Product表中的数据,接下来我方法取数据。

  了使数据通JSON格式传递给页面,里我建一般理程序(ASHX文件),

  一般理程序适用合:

<!--[if !supportLists]-->· <!--[endif]-->动态图

<!--[if !supportLists]-->· <!--[endif]-->返回REST格的XMLJSON数据

<!--[if !supportLists]-->· <!--[endif]-->自定HTML

 

........................................

<!--EndFragment-->

 

见压缩包

<!--EndFragment--><!--EndFragment-->

 

<!--EndFragment-->

  • 大小: 419.3 KB
分享到:
评论

相关推荐

    Ajax中文手册 API

    很不错的Ajax开发草考文档,方便快捷1. AJAX介绍AJAX是一种运用JavaScript和可扩展标记语言(XML),在网络浏览器和服务器之间传送或接受数据的技术。2. AJAX实例AJAX可以用来创建更多交互式的网络应用程序。3. AJAX源...

    Ajax从入门到精通.pdf

    Ajax从入门到精通.pdf 本书籍旨在深入浅出地介绍 Ajax 技术,从基础知识到高级应用,全面覆盖 Ajax 的核心概念、技术原理、实现方法和实践应用。书籍的主要内容包括: 1. Ajax 概述:本书首先介绍了 Ajax 的概念、...

    Java Ajax分页,jsp ajax分页

    Java AJAX(Asynchronous JavaScript and XML)分页与JSP(JavaServer Pages)相结合,可以提供无需刷新整个页面即可动态加载更多内容的能力,提高用户体验。本教程将深入探讨如何使用AJAX、JavaScript以及MySQL...

    深入浅出Ajax(Head Rush Ajax) 源码 书中代码

    **Ajax 概述** Ajax(Asynchronous JavaScript and XML)是一种在无需刷新整个网页的情况下,能够更新部分网页的技术。它的核心是利用JavaScript与服务器进行异步数据交换,通过XML或者JSON格式传输数据,使得用户...

    ASP.NET AJAX程序设计——第I卷:服务器端ASP.NET 2.0 AJAX Extensions与ASP.NET AJAX Control Toolkit 源代码

    本卷从最易于理解和使用的那部分入手,介绍ASP.NET AJAX框架中能够与传统ASP.NET无缝对接的服务器端部分,包括服务器端ASP.NET AJAX Extensions与ASP.NET AJAX Control Toolkit。这部分内容不需要读者有任何的客户端...

    jquery+ajax例子

    在IT行业中,jQuery和Ajax是两个非常重要的技术,它们在构建动态、交互性强的Web应用程序时发挥着关键作用。jQuery是一个高效、简洁的JavaScript库,它简化了HTML文档遍历、事件处理、动画以及Ajax交互。Ajax...

    AJAX原理 原理 AJAX

    "AJAX原理与技术的深入分析" AJAX(Asynchronous JavaScript and XML)是一种异步通信技术,允许Web应用程序异步地从服务器请求数据,而不需要重新加载整个网页。下面我们将深入分析AJAX的原理、技术、意义和发展...

    谷歌浏览器插件—— Ajax Interceptor

    **Ajax Interceptor:深入理解与应用** Ajax Interceptor 是一款专为谷歌浏览器(Chrome)设计的插件,它允许开发者在Ajax请求发送后和响应返回前进行干预,从而实现对AJAX请求数据的修改。这款插件对于前端开发、...

    AjaxRequest(Ajax使用包)

    **AjaxRequest(Ajax使用包)** Ajax,全称Asynchronous JavaScript and XML(异步JavaScript和XML),是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。AjaxRequest是实现Ajax功能的一个工具包,它...

    实例详解Android Webview拦截ajax请求

    Android Webview虽然提供了页面加载及资源请求的钩子,但是对于h5的ajax请求并没有提供干涉的接口,这意味着我们不能在webview中干涉javascript发起的http请求,而有时候我们确实需要能够截获ajax请求并实现一些功能...

    Professional Ajax, 2nd Edition.pdf

    《Professional Ajax, 2nd Edition》是一本深入探讨Ajax技术的专业书籍,由三位作者Nicholas C. Zakas、Jeremy McPeak和Joe Fawcett共同撰写。本书在2007年由Wiley Publishing, Inc.出版,是针对网站开发、设计以及...

    Head rush ajax书籍源代码

    《Head Rush Ajax》是一本专为想要深入理解Ajax技术的开发者编写的书籍。Ajax,全称为"Asynchronous JavaScript and XML",并非一种单一的技术,而是一种综合了多种Web开发技术的运用方式,它允许网页在不刷新整个...

    ajax+json实例

    **Ajax+JSON 实例详解** 在现代Web开发中,AJAX(Asynchronous JavaScript and XML)技术已经成为提升用户体验的重要工具,它允许网页在不刷新整个页面的情况下与服务器进行数据交互。结合JSON(JavaScript Object ...

    ajax代码 ajax代码

    **Ajax(Asynchronous JavaScript and XML)技术是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使网页实现异步更新。这种技术可以提升用户体验,因为它...

    php+ajax例子

    标题中的“php+ajax例子”指的是使用PHP服务器端语言与AJAX(Asynchronous JavaScript and XML)客户端技术结合的示例应用。在Web开发中,PHP通常用于处理服务器端逻辑,而AJAX则允许网页在不刷新整个页面的情况下,...

    Ajax基础教程(亚马逊计算机榜首图书,国内第1本Ajax图书) [第一部分 共两部分]

    本书重点介绍Ajax及相关的工具和技术,主要内容包括XMLHttpRequest对象及其属性和方法、发送请求和处理响应、构建完备的Ajax开发工具、使用JsUnit测试JavaScript、分析JavaScript调试工具和技术,以及Ajax开发模式和...

    完美解决ajax访问遇到Session失效的问题

    现在Ajax在Web项目中应用广泛,几乎可以说无处不在,这就带来另外一个问题:当Ajax请求遇到Session超时,应该怎么办? 显而易见,传统的页面跳转在此已经不适用,因为Ajax请求是XMLHTTPRequest对象发起的而不

    完全手册:ASP.net.Ajax电子教程

    **ASP.NET AJAX 全面解析** ASP.NET AJAX(Asynchronous JavaScript and XML)是微软为.NET Framework提供的一种技术,用于创建富交互式、响应快速的Web应用程序。它将JavaScript库(MicrosoftAjax.js)与服务器端...

    jquery.unobtrusive-ajax.rar

    2. **事件处理**:库内部监听`ajaxStart`、`ajaxSend`、`ajaxSuccess`、`ajaxError`等事件,提供了对Ajax请求生命周期的控制。开发者可以通过自定义事件处理器来扩展功能或处理错误。 3. **内容替换**:默认情况下...

Global site tag (gtag.js) - Google Analytics