??xml version="1.0" encoding="utf-8" standalone="yes"?>中文字幕亚洲免费无线观看日本,亚洲GV天堂无码男同在线观看,中文字幕第13亚洲另类http://m.tkk7.com/yifeng/category/34011.html光是知道是不够的Q必要加以应用Q光是希望是不够的,非去做不可?/description>zh-cnMon, 25 Aug 2008 19:33:34 GMTMon, 25 Aug 2008 19:33:34 GMT60AJAX基础与实?? http://m.tkk7.com/yifeng/archive/2008/08/26/224346.html忆风忆风Mon, 25 Aug 2008 18:57:00 GMThttp://m.tkk7.com/yifeng/archive/2008/08/26/224346.htmlhttp://m.tkk7.com/yifeng/comments/224346.htmlhttp://m.tkk7.com/yifeng/archive/2008/08/26/224346.html#Feedback0http://m.tkk7.com/yifeng/comments/commentRss/224346.htmlhttp://m.tkk7.com/yifeng/services/trackbacks/224346.html

AJAX?/span> JSON 发送请求数?/span>

Ø 使用XML 向服务器发送复杂的数据l构Q?/span>

Ø 通过串连接来创徏XML 串ƈ不好Q?/span>

Ø q也不是用来生成或修?/span>XML 数据l构的健壮技术?/span>

Ø JSQN 概述

 * JSON ?/span> XML 的一个替代方法,可以?/span>www.Json.org 扑ֈ?/span>

 * JSON 是一U文本格式,它独立于具体语言Q?/span>

 * 使用了与C pd语言(?/span>C ?/span>C# ?/span>JavaScript {?/span>)cM的约定?/span>

 * JSON建立在以?/span> 两种数据l构基础上,当前几乎所有编E语a都支持这两种数据l构?/span>

两种数据l构

Ø ?/span>/值对集合?/span>

 * 不同的语a中,它被理解为对象(objectQ,U录 Q?/span>recordQ,l构Q?/span>structQ,字典Q?/span>dictionaryQ,哈希表(hash tableQ,有键列表Q?/span>keyed listQ,或者关联数l?/span> Q?/span>associative arrayQ?/span>


     

Ø  值的有序表?/span>

 * q通常实现Z个数l?/span>

JSON的数据结?/span>

Ø JSON对象

 *  对象是一个无序的“‘名称/?#8217;?#8221;集合。一个对象以“{”Q左括号Q开始,“}”Q右括号Q结束。每?#8220;名称”后跟一?#8220;:”Q冒PQ?#8220;‘名称/?#8217; ?#8221;之间使用“,”Q逗号Q分隔?/span>



    

Ø JSON数组

    * 数组是|valueQ的有序集合。一个数l以“[”Q左中括P开始,“]”Q右中括Pl束。g间?#8220;,”Q逗号Q分隔?/span>




Ø ?/span>

    * |valueQ可以是双引hh的字W串Q?/span>stringQ、数?/span>(number)?/span>true?/span>false?/span> null、对象(objectQ或者数l(arrayQ。这些结构可以嵌套?/span>



Ø 字符ԌstringQ?/span>

字符ԌstringQ是由双引号包围的Q意数?/span>Unicode字符的集合,使用反斜U{义。一个字W(characterQ即一个单独的字符Ԍcharacter stringQ?/span>

字符ԌstringQ与C或?/span>Java的字W串非常怼?/span>




Ø 数|numberQ?/span>

    * 数|numberQ也?/span>C或?/span>Java的数值非常相伹{除L曾用的八进制与十六q制格式。除M些编码细节?/span>



Ø I白可以加入CQ何符号之间?/span> 以下描述了完整的语言?/span>

Ø ?/span>http://www.json.org/能得?/span>JSON?/span>

DEMO JSON对象

Ø 我们可以?/span>Employee对象的简单的例子展开q行?/span>

Ø Employee对象可能包含姓、名、员工号和职位等数据?/span>

Ø 使用JSONQ可以如下表C?/span>Employee对象实例Q?/span>

var employee = {

 “firstName”:”Zhou”,

 “lastName”:”DaQing”,

 “employeeNumber”:517,

 “title”:”Accountant”

}

Ø 然后可以使用标准点记法用对象的属性,如下所C:

var lastName = employee.lastName;

var title = employee.title;

employee.employee = 517;

JSON?/span>XML

Ø JSON 是一个轻量的数据互换格式?/span>

Ø 如果?/span> XML 来描q同Lemployee对象Q可能如下所C:

<employee>

    <firstName>Zhou</firstName>

    <lastName>DaQing</lastName>

    <employeeNumbe>517</employeeNumbe>

    <title>Accountant</title>

</employee >

Ø 昄Q?/span>JSON~码?/span>XML ~码短?/span>

Ø 如果在网l上发送大量数据,可能会带来显著的性能差异?/span>

Ø www.Json.org |站列出了至与其他~程语言?/span>14U绑?/span> ?/span>

Ø q说明,不论在服务器端用何U技术,都能通过JSON与浏览器通信?/span>

JSON

Ø 因ؓq些l构得到了如此众多编E语a的支持,所?/span>JSON 可以作ؓ异构pȝ之间的一U数据互换格式?/span>

Ø 另外Q由?/span>JSON 是基于标?/span>JavaScript 的子集,所以在所有当?/span>Web 览器上都应该是兼容的?/span>

DEMO AJAX?/span> JSON 发送请求数?/span>

Ø DEMO

 * 使用JSON ?/span>JavaScript 对象转换Z格式Q?/span>

 * Ajax 这个串发送到服务器,

 * 服务器根据这个串创徏一个对?/span>.

Ø 撰写“jsonExample.html”Q如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

        "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

 <title>JSON Example</title>

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

    <script type="text/javascript">

        var xmlHttp;

               function createXMLHttpRequest() {

                   if (window.ActiveXObject) {

                       xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

                   } else if (window.XMLHttpRequest) {

                       xmlHttp = new XMLHttpRequest();

                   }

               }

         function doJSON() {

             var car = getCarObject();

             var carAsJSON = JSON.stringify(car);

             alert("Car object as JSON:"n" + carAsJSON);

             var url = "JSONExample?timeStamp=" + new Date().getTime();

             createXMLHttpRequest();

             xmlHttp.open("POST", url, true);

             xmlHttp.onreadystatechange = handleStateChange;

             xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

             xmlHttp.send(carAsJSON);

         }

        function handleStateChange() {

            if (xmlHttp.readyState == 4) {

                if (xmlHttp.status == 200) {

                    parseResults();

                }

            }

        }

        function parseResults() {

            var responseDiv = document.getElementById("serverResponse");

            if(responseDiv.hasChildNodes()) {

                responseDiv.removeChild(responseDiv.childNodes[0]);

            }

            var responseText = document.createTextNode(xmlHttp.responseText);

            responseDiv.appendChild(responseText);

        }

        function getCarObject() {

            return new Car("Dodge","Coronet R/T",1989,"pink");

        }

        function Car(make, model, year, color) {

            this.make = make;

            this.model = model;

            this.year = year;

            this.color = color;

        }

    </script>

</head>

<body>

   <br/><br/>

<form action="#">

    <input type="button" value="Click here to send JSON data to the server" onblur="doJSON();"/>

</form>

   <h2>Server Response:</h2>

<div id="serverResponse"></div>

</body>

</html>

DEMO 服务器端接收JSON数据

Ø 然后撰写“JSONExample.java”文gQ内容如下:

package org.yifeng.webapp.servlet;

import org.json.JSONObject;

import org.json.JSONException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.ServletException;

import java.io.IOException;

import java.io.BufferedReader;

import java.text.ParseException;

/**

 * Copyright:       晟YU技

 * WebSit:          http://www.shengruan.com

 * Author:          忆风

 * QQ:              583305005

 * MSN:             YiFengs@msn.com

 * Email:           zhdqCN@gmail.com

 * CreationTime:    2008-8-26 0:49:12

 * Description:

 */

public class JSONExample extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String json = readJSONStringFromRequestBody(request);

        //q回输出l果

        String responseText = null;

        //使用JSONl字Ajax对象

        JSONObject jsonObject = null;

        try {

            jsonObject = new JSONObject(json);

            responseText = "You have a " + jsonObject.getInt("year") + " "

                    + jsonObject.getString("make") + " " + jsonObject.getString("model")

                    + " " + " that is " + jsonObject.getString("color") + " in color.";

        } catch (JSONException e) {

            e.printStackTrace(); 

        }

        response.setContentType("text/xml");

        response.getWriter().print(responseText);

    }

    private String readJSONStringFromRequestBody(HttpServletRequest request) {

        StringBuilder json = new StringBuilder();

        String line = null;

        try {

            BufferedReader reader = request.getReader();

            while ((line = reader.readLine()) != null) {

                json.append(line);

            }

        } catch (IOException e) {

            System.out.println("Error reading JSON stirng: " + e.toString());

        }

        return json.toString();

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        doPost(request, response);

    }

}

Ø 点击按钮Q显C如下:

OK,看看Q数据都昄出来了吧Q呵呵!Q!




作者:周大庆(zhoudaqingQ?
|址Q?strong>http://m.tkk7.com/yifeng
>>>转蝲h明出处!<<<



忆风 2008-08-26 02:57 发表评论
]]>
AJAX基础与实??http://m.tkk7.com/yifeng/archive/2008/08/26/224345.html忆风忆风Mon, 25 Aug 2008 18:47:00 GMThttp://m.tkk7.com/yifeng/archive/2008/08/26/224345.htmlhttp://m.tkk7.com/yifeng/comments/224345.htmlhttp://m.tkk7.com/yifeng/archive/2008/08/26/224345.html#Feedback0http://m.tkk7.com/yifeng/comments/commentRss/224345.htmlhttp://m.tkk7.com/yifeng/services/trackbacks/224345.html

发送请求参?/span>

Ø 目前我们已经讲了

1?nbsp;使用Ajax技术向服务器发送请?/span>

2?nbsp;也知道了可以采用多种Ҏ解析服务器的响应?/span>

Ø 只缺一个内容,是未将M数据作ؓh的一部分发送给服务器?/span>

GETҎ发送请求参?/span>

Ø GETҎQ作为名/值对攑֜hURL 中传递?/span>

      * 资源URL 的问号后面就是名/值对?/span>

      * ?/span>/值对?/span> name=value 的Ş式,

       *  用与?/span>(&)分隔?/span>

Ø 例如Q?/span>

http://localhost:8080/projectName?name=yifeng&password=hello

POST Ҏ发送请求参?/span>

Ø POST ҎQ将参数串放在请求体中发送?/span>

* 参数~码为名/值对QŞ式ؓname=valueQ?/span>

* 用与?/span>(&)分隔?/span>

使用GET?/span>POST的徏?/span>

Ø 获取数据时应当?/span>GET Ҏ?/span>

    * 数据处理不改变数据模型的状态?/span>

Ø 存储、更新数据,使用POST Ҏ?/span>

    * 操作改变了数据模型的状态?/span>

Ø 特点?/span>

* GET h的参数编码到hURL 中,可以URL 建立书签。(不过Q如果是异步h没有什么用。)

* GET h发送的数据量通常是固定的Q?/span>POST Ҏ可以发送Q意量的数据?/span>

DEMO AJAX以名/值对发送请求参?/span>

Ø 使用GETh?/span>POSThQ创建查询字W串技术是一L?/span>

Ø 唯一的区别是Q?/span>GET发送请求时Q查询字W串q加到请?/span>URL中,

Ø POSTҎӞ?/span>XHR对象?/span>send()Ҏ时发送查询串?/span>

Ø DEMO

getAndPostExample.html文g

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

        "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

    <title>Dynamically Editing Page Content</title>

    <script type="text/javascript" language="javascript">

        var xmlHttp;

        function createXMLHttpRequest() {

            if (window.ActiveXObject) {

                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

            } else if (window.XMLHttpRequest) {

                xmlHttp = new XMLHttpRequest();

            }

        }

        function createQueryString() {

            var firstName = document.getElementById("firstName").value;

            var middleName = document.getElementById("middleName").value;

            var birthday = document.getElementById("birthday").value;

            var queryString = "firstName=" + firstName + "&middleName=" + middleName + "&birthday=" + birthday;//?/span>/值对

            return queryString;

        }

        function doRequestUsingGET() {

            createXMLHttpRequest();

            var queryString = "GetAndPostExample?";

            queryString = queryString + createQueryString() + "&timeStamp=" + new Date().getTime();

            xmlHttp.onreadystatechange = handleStateChange;

            xmlHttp.open("GET", queryString, true);

            xmlHttp.send(null);

        }

        function doRequestUsingPOST() {

            createXMLHttpRequest();

            var url = "GetAndPostExample?timeStamp=" + new Date().getTime();

            //相同Ҏ生成?/span>/值对

            var queryString = createQueryString();

            xmlHttp.open("POST", url, true);

            xmlHttp.onreadystatechange = handleStateChange;

            xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

            xmlHttp.send(queryString);

        }

        function handleStateChange() {

            if (xmlHttp.readyState == 4) {

                if (xmlHttp.status == 200) {

                    parseResults();

                }

            }

        }

        function parseResults() {

            var responseDiv = document.getElementById("serverResponse");

            if (responseDiv.hasChildNodes()) {

                responseDiv.removeChild(responseDiv.childNodes[0]);

            }

            var responseText = document.createTextNode(xmlHttp.responseText);

            responseDiv.appendChild(responseText);

        }

    </script>

</head>

<body>

<h1>Entery your first name, middle name, and birthday:</h1>

<table>

    <tbody>

        <tr>

            <td>First name:</td>

            <td><input type="text" id="firstName"/></td>

        </tr>

        <tr>

            <td>Middle name:</td>

            <td><input type="text" id="middleName"></td>

        </tr>

        <tr>

            <td>Birthday:</td>

            <td><input type="text" id="birthday"/></td>

        </tr>

    </tbody>

</table>

<form action="#">

    <input type="button" value="Send parameters using GET" onclick="doRequestUsingGET();"/>

    <br/><br/>

    <input type="button" value="Send parameters using POST" onclick="doRequestUsingPOST();"/>

</form>

<br/>

<h2>Server Response:</h2>

<div id="serverResponse"></div>

</body>

</html>

GetAndPostExample.java文g

package org.yifeng.webapp.servlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.ServletException;

import java.io.IOException;

import java.io.PrintWriter;

/**

 * Copyright:       晟YU技

 * WebSit:          http://www.shengruan.com

 * Author:          忆风

 * QQ:              583305005

 * MSN:             YiFengs@msn.com

 * Email:           zhdqCN@gmail.com

 * CreationTime:    2008-8-25 22:44:44

 * Description:

 */

public class GetAndPostExample extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/xml");

        String firstName = request.getParameter("firstName");

        String middleName = request.getParameter("middleName");

        String birthday = request.getParameter("birthday");

        StringBuilder responseText = new StringBuilder();

        responseText.append("Hello, ").append(firstName).append(" " + middleName)

                .append(". Your birthday is " + birthday + ".")

                .append("[Method: " + request.getMethod() + "]");

        PrintWriter out = response.getWriter();

        out.println(responseText);

        out.flush();

        out.close();

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        doPost(request, response);

    }

}

Web.xml配置

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"

           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

                    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

           version="2.5">

    <servlet>

        <servlet-name>GetAndPostExample</servlet-name>

        <servlet-class>org.yifeng.webapp.servlet.GetAndPostExample</servlet-class>

    </servlet>

    <servlet-mapping>

        <servlet-name>GetAndPostExample</servlet-name>

        <url-pattern>/GetAndPostExample</url-pattern>

    </servlet-mapping>

    <welcome-file-list>

        <welcome-file>getAndPostExample.html</welcome-file>

    </welcome-file-list>

</web-app>

如果以点?#8220;Send parameters using GET”按钮Q如下图Q?br />

如果以点?#8220;Send parameters using POST”按钮Q如下图Q?br />

也许你会疑问Qؓ什么要?/span>URL后面q加旉呢?

有时览器会把多?/span>XMLHttpRequest h的结果缓存在同一?/span>URL.

如果Ҏ个请求的响应不同Q这׃带来不好的结?/span>.

把当前时间戳q加?/span> URL的最后,p保URL 的唯一性,从而避免浏览器~存l果.

* IE有这U缓存问题,但是Firefox没有。你可以去试试,哈哈?/span>

AJAX?/span> XML 发送请求数?/span>

Ø 只是使用一个包含名/值对的简单查询串Q这可能不够健壮Q?/span>

Ø 不以向服务器传递大量复杂的模型变化.

Ø 可以应用XML

Ø 如何向服务器发?/span>XML ?/span>?

Ø 可以?/span>XML 作ؓh体的一部分发送到服务器,

Ø q与POST h中将查询串作求体的一部分q行发送异曲同?/span>.

Ø 服务器可以从h体读?/span>XM LQƈ加以处理?/span>

Ø DEMO

Ø postingXML.html

DEMO AJAX?/span> XML 发送请求数?/span>

Ø 撰写“postingXML.html”文gQ如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

        "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

    <title>Sending and XML Request</title>

    <script type="text/javascript">

        var xmlHttp;

        function createXMLHttpRequest() {

            if (window.ActiveXObject) {

                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

            } else if (window.XMLHttpRequest) {

                xmlHttp = new XMLHttpRequest();

            }

        }

        /**

         * 生成XML

         */

        function createXML() {

            var xml = "<pets>";

            var options = document.getElementById("petTypes").childNodes;

            var option = null;

            for (var i = 0; i < options.length; i++) {

                option = options[i];

                if (option.selected) {

                    xml = xml + "<type>" + option.value + "<"/type>";

                }

            }

            xml = xml + "<"/pets>";

            return xml;

        }

        function sendPetTypes() {

            createXMLHttpRequest();

            var xml = createXML();

            var url = "PostingXMLExample?timeStamp=" + new Date().getTime();

            xmlHttp.open("POST", url, true);

            xmlHttp.onreadystatechange = handleStateChange;

            xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

            xmlHttp.send(xml);

        }

        function handleStateChange() {

            if (xmlHttp.readyState == 4) {

                if (xmlHttp.status == 200) {

                    parseResults();

                }

            }

        }

        function parseResults() {

            var responseDiv = document.getElementById("serverResponse");

            if (responseDiv.hasChildNodes()) {

                responseDiv.removeChild(responseDiv.childNodes[0]);

            }

            var responseText = document.createTextNode(xmlHttp.responseText);

            responseDiv.appendChild(responseText);

        }

    </script>

</head>

<body>

<h1>Select the types of pets in your home:</h1>

<form action="#">

    <select id="petTypes" size="6" multiple="true">

        <option value="cats">Cats</option>

        <option value="dogs">Dogs</option>

        <option value="fish">Fish</option>

        <option value="birds">Birds</option>

        <option value="hamsters">Hamsters</option>

        <option value="rabbits">Rabbits</option>

    </select>

    <br/><br/>

    <input type="button" value="Submit Pets" onclick="sendPetTypes();"/>

</form>

<h2>Server Response:</h2>

<div id="serverResponse"></div>

</body>

</html>

Ø 撰写“PostingXMLExample.java”文gQ如下:

package org.yifeng.webapp.servlet;

import org.w3c.dom.Document;

import org.w3c.dom.NodeList;

import org.xml.sax.SAXException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.ServletException;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

import java.io.IOException;

import java.io.BufferedReader;

import java.io.ByteArrayInputStream;

/**

 * Copyright:       晟YU技

 * WebSit:         http://www.shengruan.com

 * Author:          忆风

 * QQ:              583305005

 * MSN:             YiFengs@msn.com

 * Email:           zhdqCN@gmail.com

 * CreationTime:    2008-8-25 23:30:41

 * Description:

 */

public class PostingXMLExample extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String xml = readXMLFromRequestBody(request);//获得XML字符?/span>

        Document xmlDoc = null;

        try {

            xmlDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ByteArrayInputStream(xml.getBytes()));

        } catch (SAXException e) {

            System.out.println("SAXException: " + e);

        } catch (ParserConfigurationException e) {

            System.out.println("ParserConfigurationException: " + e);

        }

        /**

         * Java?/span>JavaScript均有W3C DOM的实玎ͼ比如getElementByTagName?/span>getNodeValueҎ

         */

        NodeList selectedPetTypes = xmlDoc.getElementsByTagName("type");

        String type = null;

        String responseText = "Selected Pets: ";

        for (int i = 0; i < selectedPetTypes.getLength(); i++) {

            type = selectedPetTypes.item(i).getFirstChild().getNodeValue();

            responseText = responseText + " " + type;

        }

        response.setContentType("text/xml");

        response.getWriter().print(responseText);

    }

    private String readXMLFromRequestBody(HttpServletRequest request) {

        StringBuilder xml = new StringBuilder();

        String line = null;

        try {

            BufferedReader reader = request.getReader();

            while ((line = reader.readLine()) != null) {

                xml.append(line);

            }

        } catch (Exception e) {

            System.out.println("Error reading XML: " + e.toString());

        }

        return xml.toString();

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        doPost(request, response);

    }

}

Ø q行Q显C如下:





作者:周大庆(zhoudaqingQ?
|址Q?strong>http://m.tkk7.com/yifeng
>>>转蝲h明出处!<<<



忆风 2008-08-26 02:47 发表评论
]]>
AJAX基础与实?? http://m.tkk7.com/yifeng/archive/2008/08/26/224344.html忆风忆风Mon, 25 Aug 2008 18:42:00 GMThttp://m.tkk7.com/yifeng/archive/2008/08/26/224344.htmlhttp://m.tkk7.com/yifeng/comments/224344.htmlhttp://m.tkk7.com/yifeng/archive/2008/08/26/224344.html#Feedback0http://m.tkk7.com/yifeng/comments/commentRss/224344.htmlhttp://m.tkk7.com/yifeng/services/trackbacks/224344.html阅读全文

忆风 2008-08-26 02:42 发表评论
]]>
AJAX基础与实??http://m.tkk7.com/yifeng/archive/2008/08/26/224342.html忆风忆风Mon, 25 Aug 2008 18:39:00 GMThttp://m.tkk7.com/yifeng/archive/2008/08/26/224342.htmlhttp://m.tkk7.com/yifeng/comments/224342.htmlhttp://m.tkk7.com/yifeng/archive/2008/08/26/224342.html#Feedback0http://m.tkk7.com/yifeng/comments/commentRss/224342.htmlhttp://m.tkk7.com/yifeng/services/trackbacks/224342.html

创徏XHR发送请?/span>

Ø 如下Q?/span>

<script type="text/javascript">

var xmlHttp;

//创徏一?/span>XMLHttpRequest对象 

function createXMLHttpRequest() {

// For Internet Explorer 5.5, 6, 7 

    if (window.ActiveXObject) {

        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

    } 

// For Mozilla, Firefox, Safari, Netscape

    else if (window.XMLHttpRequest) {

        xmlHttp = new XMLHttpRequest();

    }

}  

</script>

AJAX发送请?/span>

Ø 如下Q?/span>

function startRequest() {

    createXMLHttpRequest();

//注册回调事g处理器 

    xmlHttp.onreadystatechange = handleStateChange;

//使用Open()Ҏ初始?/span>XMLHttpRequest对象-指定HTTPҎ

//和要使用的服务器URL 

    xmlHttp.open("GET", "innerHTML.xml", true);

//send()Ҏ发送该h 

    xmlHttp.send(null);

}

应用GET POST发送请?/span>

Ø Ҏ如下Q?/span>

Ҏ?/span>

描述

getElementById(id) (document)

获取有指定唯一ID属性值文档中的元?/span>

getElementsByTagName(name)

q回当前元素中有指定标记名的子元素的数组

hasChildNodes()

q回一个布|指示元素是否有子元素

getAttribute(name)

q回元素的属性|属性由name指定

处理服务器晌?/span>

XMLHttpRequest 提供了两个可以用来访问服务器响应的属?/span>.

Ø responseText Q将响应提供Z个串?/span>

Ø responseXMLQ将响应提供Z?/span>XML 对象?/span>

使用innerHTML 属性创建动态内?/span>

Ø responseText Q innerHtmlQ?/span>

服务器 ""或生?/span>HTML 内容Q?/span>

览器用 innerHTML?/span>"消费"或处理?/span>

DEMO responseText Q innerHtml

Ø innerHTM.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

         <head>

                   <title>Using responseText with innerHTML</title>

                   <META http-equiv=Content-Type content="text/html; charset=GBK">

<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();

    xmlHttp.onreadystatechange = handleStateChange;

    xmlHttp.open("GET", "innerHTML.txt", true);

    xmlHttp.send(null);

}

function handleStateChange() {

    if(xmlHttp.readyState == 4) {

        if(xmlHttp.status == 200) {                                        

            document.getElementById("results").innerHTML = xmlHttp.responseText;

        }

    }

}

</script>

         </head>

         <body>

                   <form  action="#">

                            please content:<input  type="button"  value="Search for Todays Activities" onclick="startRequest();" />

                            <span id="results"></span>

                   </form>

         </body>

</html>

Ø innerHTML.txt

误入内容!Q!

Ø 输出l果Q?/span>







作者:周大庆(zhoudaqingQ?
|址Q?strong>http://m.tkk7.com/yifeng
>>>转蝲h明出处!<<<

忆风 2008-08-26 02:39 发表评论
]]>
AJAX基础与实??http://m.tkk7.com/yifeng/archive/2008/08/26/224341.html忆风忆风Mon, 25 Aug 2008 18:31:00 GMThttp://m.tkk7.com/yifeng/archive/2008/08/26/224341.htmlhttp://m.tkk7.com/yifeng/comments/224341.htmlhttp://m.tkk7.com/yifeng/archive/2008/08/26/224341.html#Feedback0http://m.tkk7.com/yifeng/comments/commentRss/224341.htmlhttp://m.tkk7.com/yifeng/services/trackbacks/224341.html阅读全文

忆风 2008-08-26 02:31 发表评论
]]>
AJAX基础与实?一)http://m.tkk7.com/yifeng/archive/2008/08/26/224340.html忆风忆风Mon, 25 Aug 2008 18:29:00 GMThttp://m.tkk7.com/yifeng/archive/2008/08/26/224340.htmlhttp://m.tkk7.com/yifeng/comments/224340.htmlhttp://m.tkk7.com/yifeng/archive/2008/08/26/224340.html#Feedback0http://m.tkk7.com/yifeng/comments/commentRss/224340.htmlhttp://m.tkk7.com/yifeng/services/trackbacks/224340.html

AJAX历史

Ø 2005q?/span>2?/span>, Adaptive Path ?/span>Jesse James Garrett 最早创造了q个词?/span>

Ø Ajax:A New Approach to Web Applications (Ajax: Web 应用的一U新Ҏ)中,Garrett讨论?/span> 如何消除胖客?/span>(或桌?/span>)应用与瘦客户(?/span>Web) 应用之间的界?/span>.

Ø 以前认ؓ是 "Asynchronous JavaScript + XML" 的羃?/span>.

Ø 目前认ؓ?/span>:允许览器与服务器通信而无需h当前面的技?/span>.

Ø Famous examples : Google Maps , Google Suggest , GMail ,Outlook Web Access

Ø New bottle of old wine

Ø The next generation browser will have built-in UI Component(XUL etc),IE7?/span>XMLHttpRequest实现Z个窗口对象属?/span>.

什么是AJAX

Ø AJAX技术是Asynchronous JavaScript XML(异步JavaScript ?/span>XML)的简UͼAjax提供与服务器异步通信的能力,一个无需h整个面而在|页中更C部分数据的应用。 

AJAX是一门新技术?

Ø AJAX不是一个新技术。它包含Q?/span>

1.         Z标准的展CZ用  XHTML?/span>CSS;

2.         动态显C和交互使用  文对象模型DOM;

3.         数据交换和操U用  XML?/span>XSLT?/span>JSON;

4.         异步数据索方法?/span> XMLHttpRequest(XHR);

5.         _胶剂?/span> JavaScript?/span>

Web 1.0 & Web 2.0

Ø Web 1.0 – 同步(Synchronous)

Ø Web 2.0 非同?/span>(Asynchronous)

AJAX原理?/span>


            
                 
 

作者:周大庆(zhoudaqingQ?
|址Q?strong>http://m.tkk7.com/yifeng

>>>转蝲h明出处!<<<


忆风 2008-08-26 02:29 发表评论
]]>
jQuery中文入门指南Q翻译加实例QjQuery的vҎE?/title><link>http://m.tkk7.com/yifeng/archive/2008/08/26/224337.html</link><dc:creator>忆风</dc:creator><author>忆风</author><pubDate>Mon, 25 Aug 2008 17:43:00 GMT</pubDate><guid>http://m.tkk7.com/yifeng/archive/2008/08/26/224337.html</guid><wfw:comment>http://m.tkk7.com/yifeng/comments/224337.html</wfw:comment><comments>http://m.tkk7.com/yifeng/archive/2008/08/26/224337.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/yifeng/comments/commentRss/224337.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/yifeng/services/trackbacks/224337.html</trackback:ping><description><![CDATA[<h1>jQuery中文入门指南Q翻译加实例QjQuery的vҎE?/h1> <div> <h3>中文版译者:<a >Keel</a></h3> <p>此文以实例ؓ基础一步步说明了jQuery的工作方式。现以中文翻译(d我的补充说明Q如下。如有相x见或请麻烦到我的 <a >BLOG</a> 写个回复或?<a href="mailto:keel.sike%28at%29gmail.com">EMAIL</a> 告知?/p> <p>英文原版Q?a >http://jquery.bassistance.de/jquery-getting-started.html</a> Q感谢原文作?<a >Jörn Zaefferer</a></p> <p><strong>本文发布已征求原作者同意?/strong> </p> <p>另外我认为在学习q程?有两个API文档你要打开随时查看:</p> <ul> <li><a >http://jquery.com/api/</a> <li><a >http://visualjquery.com/</a> </li> </ul> </div> <h4>以下部分为原文翻?</h4> <hr /> <div> <h2>jQuery入门指南教程</h2> <p>q个指南是一个对jQuery库的说明Q要求读者了解HTML(DOM)和CSS的一些常识。它包括了一个简单的Hello World的例子,选择器和事g基础QAJAX、FX的用法,以及如何制作jQuery的插件?q个指南包括了很多代码,你可以copy它们Qƈ试着修改它们Q看看生的效果?</p> <h2>内容提要</h2> <ol> <li><a >安装</a> <li><a >Hello jQuery</a> <li><a >Find me:使用选择器和事g</a> <li><a >Rate me:使用AJAX</a> <li><a >Animate me(让我生动h):使用FX</a> <li><a >Sort me(我有序?:使用tablesorter插g(表格排序)</a> <li><a >Plug me:制作您自q插g</a> <li><a >Next steps(下一?</a> </li> </ol> </div> <div> <h2 id="setup">安装</h2> <p>一开?我们需要一个jQuery的库,最新的下蝲可以?a >q里</a>扑ֈ。这个指南提供一个基本包含实例的包供下蝲.</p> <p>下蝲Q?a class="download" >jQuery Starterkit</a></p> <p class="log">(译者Keel?一定要下蝲q个包,光看文章不实践肯定是不行的? </p> <p class="instruction">下蝲后解压羃Q然后用你最喜欢的文本编辑器打开starterkit.html和custom.jsq两个文件?span class="log">(译者Keel?q两个就是例子文?所有的例子都用q两个例子作?custom.js写jQuery代码,starterkit.html观察效果.用editPlus打开) </span></p> <p>现在,我们已l做好了一切准备来q行q个著名?Hello world"例子.</p> <h4>本章的相关链?</h4> <ul> <li><a >Starterkit</a> <li><a >jQuery Downloads</a> </li> </ul> </div> <div> <h2 id="hello">Hello jQuery</h2> <p>在做所有事情之?我们要让jQueryd和处理文的DOM,必须可能快地在DOM载入后开始执行事?所?我们用一个ready事g作ؓ处理HTML文的开?看看我们打开的custom.jsq个文g,里面已经准备好了:</p> <pre>$(document).ready(function() {<br /> // do stuff when DOM is ready<br /> });</pre> <p>放一个简单的alert事g在需要等DOM完成载入,所以我们把dE稍变复杂一?在点MQ何一个链接时昄一个alert.</p> <pre>$(document).ready(function() {<br /> $("a").click(function() {<br /> alert("Hello world!");<br /> });<br /> });</pre> <p>q样在你点击面的一个链接时都会触发q个"Hello world"的提C?/p> <p class="log">(译者Keel?L此代码修改custom.jsq保?然后用浏览器打开starterkit.html观察效果?</p> <p>让我们看一下这些修Ҏ什么含义?("a") 是一个jQuery选择?selector),在这里,它选择所有的a标签<span id="xxdhvfz" class="log">Q译者Keel注:?lt;a></a>Q?/span>Q? h jQuery “c?#8221;(jQuery "class")的一个别Uͼ因此$()构造了一个新的jQuery 对象(jQuery object)。函?click() 是这个jQuery对象的一个方法,它绑定了一个单M件到所有选中的标{?q里是所有的a标签),q在事g触发时执行了它所提供的alertҎ.</p> <p>q里有一个拟行相似功能的代码:</p> <pre><a href="#" onclick="alert('Hello world')">Link</a></pre> <p>不同之处很明?用jQuery不需要在每个a标签上写onclick事g,所以我们拥有了一个整z的l构文(HTML)和一个行为文?JS),辑ֈ了将l构与行为分开的目?像我们使用CSSq求的一?</p> <p>下面我们会更多地了解到选择器与事g.</p> <h4>本章的相关链?</h4> <ul> <li><a >jQuery Base</a> <li><a >jQuery Expressions</a> <li><a >jQuery Basic Events</a> </li> </ul> </div> <div> <h2 id="find">Find me:使用选择器和事g</h2> <p>jQuery提供两种方式来选择html?elementsQ第一U是用CSS和Xpath选择器联合v来Ş成一个字W串来传送到jQuery的构造器Q如Q?("div > ul a")Q;W二U是用jQuery对象的几个methods(Ҏ)。这两种方式q可以联合v来؜合用?/p> <p>Z试一下这些选择器,我们来试着在我们starterkit.html中选择q修改第一个ordered list.</p> <p>一开始,我们需要选择q个list本nQ这个list有一个ID?#8220;orderedlist”Q通常的javascript写法是document.getElementById("orderedlist").在jQuery中,我们q样做:</p> <pre>$(document).ready(function() {<br /> $("#orderedlist").addClass("red");<br /> });</pre> <p>q里starterkit中的一个CSS样式red附加Corderedlist?span class="log">(译者Keel注:参考测试包中的css目录下的core.cssQ其中定义了red样式)</span>。因此,在你h了starterkit.html后,你将会看到第一个有序列?ordered list )背景色变成了U色Q而第二个有序列表没有变化.</p> <p>现在Q让我们d一些新的样式到list的子节点.</p> <pre>$(document).ready(function() {<br /> $("#orderedlist > li").addClass("blue");<br /> });</pre> <p>q样Q所有orderedlist中的li都附加了样式"blue"?/p> <p>现在我们再做个复杂一点的Q当把鼠标放在li对象上面和移开时进行样式切换,但只在list的最后一个element上生效?/p> <pre>$(document).ready(function() {<br /> $("#orderedlist li:last").hover(function() {<br /> $(this).addClass("green");<br /> }, function() {<br /> $(this).removeClass("green");<br /> });<br /> });</pre> <p>q有大量的类似的<a class="doc" title="Documentation for CSS selectors" >CSS</a>?a class="doc" title="Documentation for XPath selectors" >XPath</a>例子Q更多的例子和列表可以在<a class="doc" title="Documentation for base selectors" >q里</a>扑ֈ?span class="log">Q译者Keel注:入门看此文,修行在个人,要想在入门之后懂更多Q所以这D话的几个链接迟早是要必看的Q不会又要翻译吧...^_^!Q?/span></p> <p>每一个onXXX事g都有效,如onclick,onchange,onsubmit{,都有jQuery{h表示Ҏ<span id="rbhvfxp" class="log">Q译者Keel注:jQuery不喜ƢonXXXQ所以都Ҏ了XXXQ去掉了onQ?/span>?a class="doc" title="Documentation for advanced events" >其他的一些事?/a>Q如ready和hover,也提供了相应的方法?/p> <p>你可以在<a >Visual jQuery</a>扑ֈ全部的事件列表,在Events栏目?</p> <p>用这些选择器和事g你已l可以做很多的事情了Q但q里有一个更强的好东东!</p> <pre>$(document).ready(function() {<br /> $("#orderedlist").find("li").each(function(i) {<br /> $(this).html( $(this).html() + " BAM! " + i );<br /> });<br /> });</pre> <p>find() 让你在已l选择的element中作条g查找,因此 $("#orderedlist).find("li") 像 $("#orderedlist li"). each()一栯P代了所有的liQƈ可以在此基础上作更多的处理?大部分的Ҏ,如addClass(), 都可以用它们自己?each() 。在q个例子? html()用来获取每个li的html文本, q加一些文字,q将之设|ؓli的html文本?span class="log">Q译者Keel注:从这个例子可以看?html()Ҏ是获取对象的html代码Q?html('xxx')是设|?xxx'为对象的html代码Q?/span></p> <p>另一个经常碰到的d是在没有被jQuery覆盖的DOM元素上call一些方法,惛_一个在你用AJAX方式成功提交后的resetQ?/p> <pre>$(document).ready(function() {<br /> // use this to reset a single form<br /> $("#reset").click(function() {<br /> $("#form")[0].reset();<br /> });<br /> });</pre> <p class="log">Q译者Keel注:q里作者将form的id也写成了formQ源文g?lt;form id="form">Q这是非怸好的写法Q你可以这个IDҎform1或者testFormQ然后用$("#form1")或? ("#testForm")来表C它Q再q行试。)</p> <p>q个代码选择了所有ID?form"的元素,q在其第一个上call了一个reset()。如果你有一个以上的formQ你可以q样做:</p> <pre>$(document).ready(function() {<br /> // use this to reset several forms at once<br /> $("#reset").click(function() {<br /> $("form").each(function() {<br /> this.reset();<br /> });<br /> });<br /> });</pre> <p class="log">Q译者Keel注:h意一定要亲自这些代码写在custom.js中ƈ在starterkit.html上测试效果才能有所体会Q必要时要观察starterkit.html的html代码Q?/p> <p>q样你在点击Reset链接后,选择了文中所有的form元素Qƈ对它们都执行了一ơreset()?/p> <p>q?有一个你可能要面对的问题是不希望某些特定的元素被选择。jQuery 提供了filter() 和not() Ҏ来解册个问题?filter()以过滤表辑ּ来减不W合的被选择? not()则用来取消所有符合过滤表辑ּ的被选择? 考虑一个无序的listQ你惌选择所有的没有ul子元素的li元素?/p> <pre>$(document).ready(function() {<br /> $("li").not("[ul]").css("border", "1px solid black");<br /> });</pre> <p>q个代码选择了所有的li元素Q然后去除了没有ul子元素的li元素。刷新浏览器后,所有的li元素都有了一个边框,只有ul子元素的那个li元素例外?/p> <p class="log">Q译 者Keel注:h意体会方便之极的css()ҎQƈ再次提醒请务必实际测试观察效果,比方说换个CSS样式呢?再加一个CSS样式呢?像这P$ ("li").not("[ul]").css("border", "1px solid black").css("color","red");Q?/p> <p>上面代码中的[expression] 语法是从XPath而来Q可以在子元素和属?elements and attributes)上用作过滤器Q比如你可能想选择所有的带有name属性的链接:</p> <pre>$(document).ready(function() {<br /> $("a[@name]").background("#eee");<br /> });</pre> <p>q个代码l所有带有name属性的链接加了一个背景色?span class="log">Q译者Keel注:q个颜色太不明显了,写成$("a[@name]").background("red");Q?/span></p> <p>更常见的情况是以name来选择链接Q你可能需要选择一个有特点href属性的链接Q这在不同的览器下对href的理解可能会不一_所以我们的部分匚w("*=")的方式来代替完全匚w("=")Q?/p> <pre>$(document).ready(function() {<br /> $("a[@href*=/content/gallery]").click(function() {<br /> // do something with all links that point somewhere to /content/gallery<br /> });<br /> });</pre> <p>到现在ؓ止,选择器都用来选择子元素或者是qo元素。另外还有一U情冉|选择上一个或者下一个元素,比如一个FAQ的页面,{案首先会隐藏,当问题点LQ答案显C出来,jQuery代码如下Q?/p> <pre>$(document).ready(function() {<br /> $('#faq').find('dd').hide().end().find('dt').click(function() {<br /> var answer = $(this).next();<br /> if (answer.is(':visible')) {<br /> answer.slideUp();<br /> } else {<br /> answer.slideDown();<br /> }<br /> });<br /> });</pre> <p>q?里我们用了一些链式表达法来减代码量Q而且看上L直观更容易理解。像'#faq' 只选择了一ơ,利用end()ҎQ第一ơfind()Ҏ会结?undone)Q所以我们可以接着在后面lfind('dt')Q而不需要再? ('#faq').find('dt')?/p> <p>在点M件中的,我们?$(this).next() 来找到dt下面紧接的一个dd元素Q这让我们可以快速地选择在被点击问题下面的答案?/p> <p class="log">Q译 者Keel注:q个例子真是太酷了,FAQ中的{案可以收羃Q从利用next()的思\到实现这些效果都有很多地斚w要我们消化,注意 if (answer.is(':visible'))用法Q注意answer.slideUp();不懂的地方赶紧查我在最开始提到的两个必看API文档Q?/p> <p>除了选择同别的元素外,你也可以选择父的元素。可能你惛_用户鼠标Ud文章某段的某个链接时Q它的父U元?-也就是文章的q一D늪出显C,试试q个Q?/p> <pre>$(document).ready(function() {<br /> $("a").hover(function() {<br /> $(this).parents("p").addClass("highlight");<br /> }, function() {<br /> $(this).parents("p").removeClass("highlight");<br /> });<br /> });</pre> <p>试效果可以看到Q移到文章某D늚链接Ӟ它所在的D全用上highlight样式Q移C后又恢复原样?/p> <span id="zbxjtrz" class="log">Q译者Keel注:highlight是core.css中定义的样式Q你也可以改变它Q注意这里有W二个function()q是hoverҎ的特点,请在API文中查阅hoverQ上面也有例子说明)</span> <p>在我们l之前我们先来看看这一步: jQuery会让代码变得更短从而更Ҏ理解和维护,下面?(document).ready(callback)的羃写法Q?/p> <pre>$(function() {<br /> // code to execute when the DOM is ready<br /> });</pre> <p>应用到我们的Hello world例子中,可以q样:</p> <pre>$(function() {<br /> $("a").click(function() {<br /> alert("Hello world!");<br /> });<br /> });</pre> <p>现在Q我们手上有了这些基的知识,我们可以更进一步的探烦其它斚w的东西,׃AJAX开始!</p> <h4>本章的相关链?</h4> <ul> <li><a >jQuery API documentation</a> <li><a >Visual jQuery - A categorized browsable API documentation</a> <li><a >jQuery Expressions: CSS</a> <li><a >jQuery Expressions: XPath</a> <li><a >jQuery Expressions: Custom</a> <li><a >jQuery Special Events</a> <li><a >jQuery DOM Traversing</a> </li> </ul> </div> <div> <h2 id="rate">Rate me:使用AJAX</h2> <p>在这一部分我们写了一个小的AJAX应用Q它能够rate一些东?span class="log">Q译Keel注:是Ҏ些东西投)</span>Q就像在youtube.com上面看到的一栗?/p> <p>首先我们需要一些服务器端代码,q个例子中用C一个PHP文gQ读取rating参数然后q回ratingL和^均数。看一?a >rate.php</a>代码.</p> <p>虽然q些例子也可以不使用AJAX来实玎ͼ但显C我们不会那么做Q我们用jQuery生成一个DIV容器QID?rating".</p> <pre>$(document).ready(function() {<br /> // generate markup<br /> var ratingMarkup = ["Please rate: "];<br /> for(var i=1; i <= 5; i++) {<br /> ratingMarkup[ratingMarkup.length] = "<a href='#'>" + i + "</a> ";<br /> }<br /> // add markup to container and applier click handlers to anchors<br /> $("#rating").append( ratingMarkup.join('') ).find("a").click(function(e) {<br /> e.preventDefault();<br /> // send requests<br /> $.post("rate.php", {rating: $(this).html()}, function(xml) {<br /> // format result<br /> var result = [<br /> "Thanks for rating, current average: ",<br /> $("average", xml).text(),<br /> ", number of votes: ",<br /> $("count", xml).text()<br /> ];<br /> // output result<br /> $("#rating").html(result.join(''));<br /> } );<br /> });<br /> });</pre> <p>q段代码生成?个链接,q将它们q加到id?rating"容器中,当其中一个链接被点击Ӟ该链接标明的分数׃以rating参数形式发送到rate.phpQ然后,l果以XML形式会从服务器端传回来,d到容器中Q替代这些链接?/p> <p>如果你没有一个安装过PHP的webserverQ你可以看看q个<a >在线的例?/a>.</p> <p>不用javascript实现的例子可以访?<a >softonic.de</a> 点击 "Kurz bewerten!"</p> <p>更多的AJAXҎ可以?a class="doc" title="Documentation for AJAX methods" >q里</a> 扑ֈQ或者看?a >API文档</a> 下面的AJAX filed under AJAX.</p> <p class="log">Q译者Keel注:q个在线实例从国内访问还是比较慢的,点击后要{一会儿才能看到l果Q可以考虑对它q行修改Q比如加上loadingQ投后加上再投的q回链接{。此外,q个例子中还是有很多需要进一步消化的地方Q看不懂的地方请参考API文。)</p> <p>一个在使用AJAX载入内容时经常发生的问题是:当蝲入一个事件句柄到一个HTML文档Ӟq需要在载入内容上应用这些事Ӟ你不得不在内容加载完成后应用q些事g句柄Qؓ了防止代码重复执行,你可能用到如下一个function:</p> <pre>// lets use the shortcut<br /> $(function() {<br /> var addClickHandlers = function() {<br /> $("a.clickMeToLoadContent").click(function() {<br /> $("#target").load(this.href, addClickHandlers);<br /> });<br /> };<br /> addClickHandlers();<br /> });</pre> <p>现在QaddClickHandlers只在DOM载入完成后执行一ơ,q是在用hơ点d有clickMeToLoadContent q个样式的链接ƈ且内容加载完成后.</p> <p>h意addClickHandlers函数是作Z个局部变量定义的Q而不是全局变量(如:function addClickHandlers() {...})Q这样做是ؓ了防止与其他的全局变量或者函数相冲突.</p> <p>另一个常见的问题是关于回?callback)的参数。你可以通过一个额外的参数指定回调的方法,单的办法是将q个回调Ҏ包含在一个其它的function?</p> <pre>// get some data<br /> var foobar = ...;<br /> // specify handler, it needs data as a paramter<br /> var handler = function(data) {<br /> ...<br /> };<br /> // add click handler and pass foobar!<br /> $('a').click( function(event) { handler(foobar); } );<br /> <br /> // if you need the context of the original handler, use apply:<br /> $('a').click( function(event) { handler.apply(this, [foobar]); } );</pre> <p>用到单的AJAX后,我们可以认ؓ已经非常?#8220;web2.0”了,但是到现在ؓ止,我们q缺一些酷炫的效果。下一节将会谈到这些效?</p> <h4>本章的相关链?</h4> <ul> <li><a >jQuery AJAX Module</a> <li><a >jQuery API: Contains description and examples for append and all other jQuery methods</a> <li><a >ThickBox: A jQuery plugin that uses jQuery to enhance the famous lightbox</a> </li> </ul> </div> <div> <h2 id="animate">Animate me(让我生动h):使用FX</h2> <p>一些动态的效果可以使用 <code>show()</code> ?<code>hide()</code>来表?</p> <pre>$(document).ready(function() {<br /> $("a").toggle(function() {<br /> $(".stuff").hide('slow');<br /> }, function() {<br /> $(".stuff").show('fast');<br /> });<br /> });</pre> <p>你可以与 <code>animate()</code>联合h创徏一些效?如一个带渐显的滑动效?</p> <pre>$(document).ready(function() {<br /> $("a").toggle(function() {<br /> $(".stuff").animate({<br /> height: 'hide',<br /> opacity: 'hide'<br /> }, 'slow');<br /> }, function() {<br /> $(".stuff").animate({<br /> height: 'show',<br /> opacity: 'show'<br /> }, 'slow');<br /> });<br /> });</pre> <p>很多不错的效果可以访?a >interface plugin collection</a>. q个站点提供了很多demos和文?/p> <p>q些效果插g是位于jQuery插g列表的前面的Q当然也有很多其他的插gQ比如我们下一章讲到的表格排序插g?/p> <h4>本章的相关链?</h4> <ul> <li><a >jQuery FX Module</a> <li><a >Interface plugin</a> </li> </ul> </div> <div> <h2 id="sort">Sort me(我有序?:使用tablesorter插g(表格排序)</h2> <p>q个表格排序插g能让我们在客L按某一列进行排序,引入jQuery和这个插件的js文gQ然后告诉插件你惌哪个表格拥有排序功能?/p> <p>要测试这个例子,先在starterkit.html中加上像下面q一行的代码Q?/p> <pre><script src="lib/jquery.tablesorter.js" type="text/javascript"></script></pre> <p>然后可以q样调用不着:</p> <pre>$(document).ready(function() {<br /> $("#large").tableSorter();<br /> });</pre> <p>现在点击表格的第一行head区域Q你可以看到排序的效果,再次点击会按倒过来的序q行排列?/p> <p>q个表格q可以加一些突出显C的效果Q我们可以做q样一个隔行背景色Q斑马线Q效?</p> <pre>$(document).ready(function() {<br /> $("#large").tableSorter({<br /> stripingRowClass: ['odd','even'], // Class names for striping supplyed as a array.<br /> stripRowsOnStartUp: true // Strip rows on tableSorter init.<br /> });<br /> });</pre> <p>关于q个插g的更多例子和文可以?<a >tablesorter首页</a>扑ֈ.</p> <p>几乎所有的特g都是q样用的:先include插g的js文g,然后在某些元素上使用插g定义的方?当然也有一些参数选项是可以配|的</p> <p>l常更新的插件列表可以从jQuery官方?<a title="Plugins for jQuery" >on the jQuery site</a>扑ֈ.</p> <p>当你更经常地使用jQuery?你会发现你自己的代码打包成插g是很有用处的,它能方便地让你的公司或者其他hq行重用.下一章我们将谈到如何构徏一个自q插g.</p> <h4>本章的相关链?</h4> <ul> <li><a >Plugins for jQuery</a> <li><a >Tablesorter Plugin</a> </li> </ul> </div> <div> <h2 id="plug">Plug me:制作自己的插?/h2> <p>写一个自qjQuery插g是非常容易的,如果你按照下面的原则来做,可以让其他h也容易地l合使用你的插g.</p> <ol> <li>Z的插件取一个名?在这个例子里面我们叫?foobar". <li>创徏一个像q样的文?jquery.[yourpluginname].js,比如我们创徏一个jquery.foobar.js <li>创徏一个或更多的插件方?使用l承jQuery对象的方?? <pre>jQuery.fn.foobar = function() {<br /> // do something<br /> };</pre> <li>可选的:创徏一个用于帮助说明的函数,? <pre>jQuery.fooBar = {<br /> height: 5,<br /> calculateBar = function() { ... },<br /> checkDependencies = function() { ... }<br /> };</pre> <p>你现在可以在你的插g中用这些帮助函C:</p> <pre>jQuery.fn.foobar = function() {<br /> // do something<br /> jQuery.foobar.checkDependencies(value);<br /> // do something else<br /> };</pre> <li>可选的l:创徏一个默认的初始参数配置,q些配置也可以由用户自行讑֮,? <pre>jQuery.fn.foobar = function(options) {<br /> var settings = {<br /> value: 5,<br /> name: "pete",<br /> bar: 655<br /> };<br /> if(options) {<br /> jQuery.extend(settings, options);<br /> }<br /> };</pre> <p>现在可以无需做Q何配|地使用插g?默认的参数在此时生效:</p> <pre>$("...").foobar();</pre> <p>或者加入这些参数定?</p> <pre>$("...").foobar({<br /> value: 123,<br /> bar: 9<br /> });</pre> </li> </ol> <p>如果你release你的插g, 你还应该提供一些例子和文档,大部分的插g都具备这些良好的参考文?</p> <p>现在你应该有了写一个插件的基础,让我们试着用这些知识写一个自q插g.</p> <p>很多着控制所有的radio或者checkbox是否被选中,比如:</p> <pre>$("input[@type='checkbox']").each(function() {<br /> this.checked = true;<br /> // or, to uncheck<br /> this.checked = false;<br /> // or, to toggle<br /> this.checked = !this.checked;<br /> });</pre> <p>无论何时候,当你的代码出现eachӞ你应该重写上面的代码来构造一个插?很直接地:</p> <pre>$.fn.check = function() {<br /> return this.each(function() {<br /> this.checked = true;<br /> });<br /> };</pre> <p>q个插g现在可以q样?</p> <pre>$("input[@type='checkbox']").check();</pre> <p>现在你应该还可以写出uncheck()和toggleCheck()?但是先停一?让我们的插g接收一些参?</p> <pre>$.fn.check = function(mode) {<br /> var mode = mode || 'on'; // if mode is undefined, use 'on' as default<br /> return this.each(function() {<br /> switch(mode) {<br /> case 'on':<br /> this.checked = true;<br /> break;<br /> case 'off':<br /> this.checked = false;<br /> break;<br /> case 'toggle':<br /> this.checked = !this.checked;<br /> break;<br /> }<br /> });<br /> };</pre> <p>q里我们讄了默认的参数,所以将"on"参数省略也是可以?当然也可以加?on","off", ?"toggle",?</p> <pre>$("input[@type='checkbox']").check();<br /> $("input[@type='checkbox']").check('on');<br /> $("input[@type='checkbox']").check('off');<br /> $("input[@type='checkbox']").check('toggle');</pre> <p>如果有多于一个的参数讄会稍E有点复?在用时如果只想讄W二个参?则要在第一个参C|写入null.</p> <p>从上一章的tablesorter插g用法我们可以看到,既可以省略所有参数来使用或者通过一?key/value Ҏ重新讄每个参数.</p> <p>作ؓ一个练?你可以试着?<a >W四?/a> 的功能重写ؓ一个插?q个插g的骨架应该是像这L:</p> <pre>$.fn.rateMe = function(options) {<br /> var container = this; // instead of selecting a static container with $("#rating"), we now use the jQuery context<br /> <br /> var settings = {<br /> url: "rate.php"<br /> // put more defaults here<br /> // remember to put a comma (",") after each pair, but not after the last one!<br /> };<br /> <br /> if(options) { // check if options are present before extending the settings<br /> $.extend(settings, options);<br /> }<br /> <br /> // ...<br /> // rest of the code<br /> // ...<br /> <br /> return this; // if possible, return "this" to not break the chain<br /> });</pre> </div> <div> <h2 id="next">Next steps(下一?</h2> <p>如果你想做更好的javascript开?你用一个叫 <a >FireBug</a>的firefox插g. 它提供了断点调试(比alert强多?、观察DOM变化{很多漂亮的功能</p> <p>如果你还有未解决的问题,或者新的想法与Q你可以使用jQuery的邮件列?<a >jQuery mailing list</a>.</p> <p>关于q个指南的Q何事情,你可以写<a href="mailto:enchos%20%5Bat%5D%20gmx%20%5Bdot%5D%20net">mail</a>l作者或者发表评论在他的日志Q?a >blog</a>.</p> <p class="log">关于q个指南的翻译Q何事情,你可以写<a href="mailto:keel.sike%5Bat%5D%20gmail.com">mail</a>l我或者发表评论在我的日志Q?a >blog</a>.</p> </div> <div> <h3>q有什?..</h3> <p>大大感谢John Resig创造了q么好的library! 感谢jQuery community 为John提供了如此多的咖啡和其他的一?</p> </div> <h4><a >© 2006, Jörn Zaefferer</a> - last update: 2006-09-12</h4> <h4>中文版翻?<a >Keel</a> - 最后更? 2006-12-13</h4> <script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script><script type="text/javascript">_uacct = "UA-333331-1";urchinTracker();</script> <img src ="http://m.tkk7.com/yifeng/aggbug/224337.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/yifeng/" target="_blank">忆风</a> 2008-08-26 01:43 <a href="http://m.tkk7.com/yifeng/archive/2008/08/26/224337.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://m.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://wwwk47.com" target="_blank">avëƬһ</a>| <a href="http://haodiaose35pao.com" target="_blank">Ʒxxxxˮ޹Ʒþһ</a>| <a href="http://6123fa.com" target="_blank">ѾƷƵ</a>| <a href="http://adcaes.com" target="_blank">޳˸߹ۿ</a>| <a href="http://doubaye.com" target="_blank">츾avһ</a>| <a href="http://pc521.com" target="_blank">õһۺϾƷ</a>| <a href="http://88bgbg.com" target="_blank">պƷһ</a>| <a href="http://66h99.com" target="_blank">Ʒ༤þþ </a>| <a href="http://927ff.com" target="_blank">պĻѹۿ</a>| <a href="http://www84847.com" target="_blank">avһ </a>| <a href="http://44168888.com" target="_blank">ֳִִֺƵ </a>| <a href="http://3838dydy.com" target="_blank">Ƶ߹ۿһ</a>| <a href="http://dqmovie.com" target="_blank">ۺŮþþ30p</a>| <a href="http://142121.com" target="_blank">˹ƷŮëƬѲ</a>| <a href="http://uu313.com" target="_blank">ŷպһ</a>| <a href="http://600c28.com" target="_blank">8x8Ƶ</a>| <a href="http://www907ii.com" target="_blank">ѿٸ߳Ƭ</a>| <a href="http://tiantiantegou.com" target="_blank">ֳִִӲ3pƵ </a>| <a href="http://6t23.com" target="_blank">Ƶ</a>| <a href="http://zhaofeiz.com" target="_blank">³˿Ƭһۿ</a>| <a href="http://rr7733.com" target="_blank">ҹ߹ۿ</a>| <a href="http://6777s.com" target="_blank">ھƷ뿨123</a>| <a href="http://tv787.com" target="_blank">69ƷƵ</a>| <a href="http://yanshimlxg.com" target="_blank">AV߲Ų </a>| <a href="http://gsonlinet.com" target="_blank">ձһ</a>| <a href="http://moushengguigz.com" target="_blank">޳ɫwwwþվҹ</a>| <a href="http://hengzekang.com" target="_blank">ۺ޹һҳ </a>| <a href="http://www42iii.com" target="_blank">ձa߹ۿ</a>| <a href="http://87fulitv.com" target="_blank">ëƬŮAPP</a>| <a href="http://shulan88.com" target="_blank">߹ۿ˳Ƶ</a>| <a href="http://mm9d.com" target="_blank">ɫƵɫ¶¶ѹۿ</a>| <a href="http://hndsfwl.com" target="_blank">ҹƵ߹ۿ</a>| <a href="http://99999pp.com" target="_blank">ŮɫëƬѿ</a>| <a href="http://ksp33.com" target="_blank">99Ƶ߾Ʒѹۿ6</a>| <a href="http://q2c6.com" target="_blank">޶߹ۿվ</a>| <a href="http://2002tw.com" target="_blank">ѹۿëƬֻƵ</a>| <a href="http://wbkk88.com" target="_blank">ƷƵ</a>| <a href="http://newbuybay.com" target="_blank">h⶯߹ۿ</a>| <a href="http://6609929.com" target="_blank">޾ƷƵ</a>| <a href="http://hidiaoyan.com" target="_blank">ŷAVӰ߹ۿ</a>| <a href="http://4husese.com" target="_blank">޹Ʒþþϼ2</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>