JavaScript 与 jQuery AJAX

JavaScript的Frame对象

JavaScript要引用一个子框架,可以使用如下语法:window.frames[“frameName”];  window.frames.frameName和window.frames[index] 即frames是一个数组,通过索引,名字或. 的方式都可以获取一个frame,其中,window字样也可以用self代替,这个在很多其他语言比如Lua中也有类似的应用。

了解了如何引用一个Frame,那么引用的这个Frame到底是什么呢?其实,每个Frame都对应一个HTML 页面,所以这个Frame也是一个独立的浏览器窗口,它具有窗口的所有性质,所谓对Frame的引用也就是对window 对象的引用。有了这个window 对象,就可以很方便地对其中的页面进行操作,例如使用window.document对象向页面写入数据、使用window.location属性来改变框架内的页面等。介绍不同层次框架间的互相引用:
1.父框架到子框架的引用

知道了上述原理,从父框架引用子框架变的非常容易,即:window.frames[“frameName”];这样就引用了页面内名为frameName 的子框架。如果要引用子框架内的子框架,根据引用的框架实际就是window对象的性质,可以这样实现:window.frames[“frameName”].frames[“frameName2”];这样就很引用到了二级子框架,以此类推,可以实现多层框架的引用。

2.子框架到父框架的引用

每个window对象都有一个parent属性,表示它的父框架。如果该框架已经是顶层框架,则window.parent 还表示该框架本身。

3.兄弟框架间的引用

如果两个框架同为一个框架的子框架,它们称为兄弟框架,可以通过父框架来实现互相引用,例如一个页面包括2 个子框架:

<frameset rows="50%,50%">

       <frame src="1.html" name="frame1" />

        <frame src="2.html" name="frame2" />

</frameset>

在frame1 中可以使用如下语句来引用frame2:

self.parent.frames[“frame2”];

4.不同层次框架间的互相引用框架的层次是针对顶层框架而言的。当层次不同时,只要知道自己所在的层次以及另一个框架所在的层次和名字,利用框架引用的window对象性质,可以很容易地实现互相访问例如:self.parent.frames[“childName”].frames[“targetFrameName”];
5.对顶层框架的引用

和parent 属性类似,window 对象还有一个top 属性。它表示对顶层框架的引用,这可

以用来判断一个框架自身是否为顶层框架,例如:

//判断本框架是否为顶层框架

if(self==top){

   //dosomething

}


JavaScript的Windows对象

Window对象:代表浏览器对象

window.open(“b.html”); 新建一个窗口打开该页面,等价于 <a href=”b.html” target=”_blank”>b</html>

但window.open对新建窗口的样式可以有更多的控制,例如:窗口大小、是否显示菜单栏、是否显示滚动条、是否显示地址栏等等。其完整的调用语法如下:window.open(url,windowName,”name1=value1[,name2=value2,[…]]”);
其中:url 是要打开的页面地址;windowName 表示新建窗口的名字,从而可以对其进行控制;最后是一个用字符串表示的参数列表,每一个参数都是名称和值对应的形式,用逗号隔开,其中可以使用的参数包括: height:表示新建窗口的高度;width:表示新建窗口的宽度; left:表示新建窗口到屏幕左边缘的距离; top:表示新建窗口到屏幕顶端的距离,其余的属性主要是布尔型的,用yes 或者1 表示开启,如location:是否显示地址栏;menubar:是否显示菜单栏;等等 


window 对象提供了两个方法来实现定时器的效果,分别是window.setTimeout()和window.setInterval。其中前者可以使一段代码在指定时间后运行;而后者则可以使一段代码每过指定时间就运行一次。它们的原型如下:
window.setTimeout(expression,milliseconds);
window.setInterval(expression,milliseconds);


status 和defaultStatus 是window对象的属性,用于设置状态栏信息,语法为:
window.status=”message”;
window.defaultStatus=”message”;

window.prompt(message,defaultValue); prompt 用于让用户输入一个值,其中message 表示提示信息,defaultValue 表示显示于文本框的初始值;函数返回用户的输入。对话框包括【确定】和【取消】两个按钮,用户单击【确定】按钮则返回文本框中的内容,单击【取消】则返回null。

如果要使用jQuery打开窗口,有几种方式,这几种方式都是修改了a的属性target,使之在点击连接的时候,在新窗口中打开:

 第一种:下面的代码是针对jb51这个样式下的a都是在新窗口打开 代码如下:

<script type="text/javascript"> 
  jQuery(document).ready(function($) { $('.jb51 a').attr({target: "_blank"}); }); 
</script> 

第二种: 代码如下:

<script src="http://code.jquery.com/jquery-latest.js"></script> 
<script type="text/javascript"> 
   // open url in new a window 
   $(document).ready(function(){ $("a").attr("target", "_blank");}); 
</script> 

在新窗口中打开外部链接 代码如下:
$('a[href^="http://"]') .attr("target", "_blank"); 

第三种:如果想更方便的控制 ,XHTML 1.0 Strict 版本不支持 target="_blank" 属性,而使用 JQuery 能很好地解决这个问题,实现新窗口打开网页: 代码如下:
$('a[@rel$='external']').click(function(){ 
   this.target = "_blank"; 
}); 
/* 
  Usage: <a href="http://www.poluoluo.com/" rel="external">poluoluo.com</a> 
*/ 

Js可以使用try-catch-finally处理异常

  1. var sco = "global";   
  2. function print1() {   
  3.     alert(sco);   //global  
  4. }   
  5. function print2() {   
  6.     var sco = "local";   
  7.     alert(sco);   //local  
  8. }   
  9. function print3() {   
  10.     alert(sco);   //undefined  因为print3中定义了一个局部变量,在一个函数内部定义个局部变量,则同名的全局变量不起作用
  11.     var sco = "local";    
  12.     alert(sco);   local   
  13. }   

 

还有闭包的概念 不太明白,还要继续探索啊!!!在 http://blog.csdn.net/luoshenhappy99/article/details/5813282 中有详细介绍

一个jQuery的用例:这个用例的是页面加载完毕后在Id为start的class上添加了一个函数,该函数的功能是发送一个post请求,当请求成功后将结果更新在html上

var xmlHttp;  
function createXMLHttpRequest() {  
    if (window.ActiveXObject) {  
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");  
    }  
    else if (window.XMLHttpRequest) {  
        xmlHttp = new XMLHttpRequest();  
    }  
}  
var okFunc = function(){  
    if(xmlHttp.readyState == 4) {  
        if(xmlHttp.status == 200) {  
            $("#msg").html(xmlHttp.responseText);  
        }  
    }  
}  
var startAjax = function(){  
    $("#msg").html("Loading...");  
    createXMLHttpRequest();  
    if( !xmlHttp){  
        return alert('create failed');  
    }  
    xmlHttp.open("POST", "Test", true);  
    xmlHttp.onreadystatechange = okFunc;  
    xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");  
    xmlHttp.send(document);  
}  
$(document).ready(function(){  
    $("#start").click(startAjax);  
    $.post("Test",{'name':'Hello','age':22});  
});

javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用。

A.prototype = new B();

理解prototype不应把它和继承混淆。A的prototype为B的一个实例,可以理解A将B中的方法和属性全部克隆了一遍。A能使用B的方法和属性。这里强调的是克隆而不是继承。可以出现这种情况:A的prototype是B的实例,同时B的prototype也是A的实例。

jQuery电子说明文档1.4.1 http://jianggege.iteye.com/blog/1502751


jQuery技巧总结
一、简介

1.1、概述
随着WEB2.0及ajax思想在互联网上的快速发展传播,陆续出现了一些优秀的Js框架,其中比较著名的有Prototype、YUI、jQuery、mootools、Bindows以及国内的JSVM框架等,通过将这些JS框架应用到我们的项目中能够使程序员从设计和书写繁杂的JS应用中解脱出来,将关注点转向功能需求而非实现细节上,从而提高项目开发速度。
jQuery是继prototype之后的又一个优秀的Javascript框架。它是由 John Resig 于 2006 年初创建的,它有助于简化 JavaScript™ 以及Ajax 编程。有人使用这样的一比喻来比较prototype和jQuery:prototype就像Java,而jQuery就像ruby. 它是一个简洁快速灵活的JavaScript框架,它能让你在你的网页上简单的操作文档、处理事件、实现特效并为Web页面添加Ajax交互。

它具有如下一些特点:
1、代码简练、语义易懂、学习快速、文档丰富。
2、jQuery是一个轻量级的脚本,其代码非常小巧,最新版的JavaScript包只有20K左右。
3、jQuery支持CSS1-CSS3,以及基本的xPath。
4、jQuery是跨浏览器的,它支持的浏览器包括IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+。
5、可以很容易的为jQuery扩展其他功能。
6、能将JS代码和HTML代码完全分离,便于代码和维护和修改。
7、插件丰富,除了jQuery本身带有的一些特效外,可以通过插件实现更多功能,如表单验证、tab导航、拖放效果、表格排序、DataGrid,树形菜单、图像特效以及ajax上传等。

jQuery的设计会改变你写JavaScript代码的方式,降低你学习使用JS操作网页的复杂度,提高网页JS开发效率,无论对于js初学者还是资深专家,jQuery都将是您的首选。
jQuery适合于设计师、开发者以及那些还好者,同样适合用于商业开发,可以说jQuery适合任何JavaScript应用的地方,可用于不同的Web应用程序中。
官方站点:http://jquery.com/  中文站点:http://jquery.org.cn/

1.2、目的
通过学习本文档,能够对jQuery有一个简单的认识了解,清楚JQuery与其他JS框架的不同,掌握jQuery的常用语法、使用技巧及注意事项。

二、使用方法
在需要使用JQuery的页面中引入JQuery的js文件即可。例如:<script type="text/javascript" src="js/jquery.js"></script> 引入之后便可在页面的任意地方使用jQuery提供的语法。

三、学习教程及参考资料
请参照《jQuery中文API手册》和http://jquery.org.cn/visual/cn/index.xml
推荐两篇不错的jquery教程:《jQuery的起点教程》和《使用 jQuery 简化 Ajax 开发》
(说明:以上文档都放在了【附件】中)

四、语法总结和注意事项

1、关于页面元素的引用
通过jquery的$()引用元素包括通过id、class、元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用dom定义的方法。

2、jQuery对象与dom对象的转换
只有jquery对象才能使用jquery定义的方法。注意dom对象和jquery对象是有区别的,调用方法时要注意操作的是dom对象还是jquery对象。
普通的dom对象一般可以通过$()转换成jquery对象
如:$(document.getElementById("msg"))则为jquery对象,可以使用jquery的方法。
由于jquery对象本身是一个集合。所以如果jquery对象要转换为dom对象则必须取出其中的某一项,一般可通过索引取出
如:$("#msg")[0],$("div").eq(1)[0],$("div").get()[1],$("td")[5]这些都是dom对象,可以使用dom中的方法,但不能再使用Jquery的方法。
以下几种写法都是正确的:
$("#msg").html();
$("#msg")[0].innerHTML;
$("#msg").eq(0)[0].innerHTML;
$("#msg").get(0).innerHTML;

jQuery 选择器 $("#id"), $("elementName"), $(".className"), $("*")分别表示选择ID,element, class, 和每一个

$("form input") :在给定的祖先元素下匹配所有的后代元素: 空格表示祖先与后代的关系
$("form > input") :在给定的父元素下匹配所有的子元素: > 表示父子关系
$("label + input"):匹配所有紧接在 prev 元素后的 next 元素:+表示 紧跟的关系
$("form ~ input"): 匹配 prev 元素之后的所有 siblings 元素:~: 兄弟层级的关系


3、如何获取jQuery集合的某一项
对于获取的元素集合,获取其中的某一项(通过索引指定)可以使用eq或get(n)方法或者索引号获取,要注意,eq返回的是jquery对象,而get (n)和索引返回的是dom元素对象。对于jquery对象只能使用jquery的方法,而dom对象只能使用dom的方法,如要获取第三个< div>元素的内容。有如下两种方法:
$("div").eq(2).html();              //调用jquery对象的方法
$("div").get(2).innerHTML;       //调用dom的方法属性


4、同一函数实现set和get:如果空就是get,如果有内容就是set
Jquery中的很多方法都是如此,主要包括如下几个:
$("#msg").html();              //返回id为msg的元素节点的html内容。
$("#msg").html("<b>new content</b>");      
//将“<b>new content</b>” 作为html串写入id为msg的元素节点内容中,页面显示粗体的new content

$("#msg").text();              //返回id为msg的元素节点的文本内容。
$("#msg").text("<b>new content</b>");      
//将“<b>new content</b>” 作为普通文本串写入id为msg的元素节点内容中,页面显示粗体的<b>new content</b>

$("#msg").height();              //返回id为msg的元素的高度
$("#msg").height("300");       //将id为msg的元素的高度设为300
$("#msg").width();              //返回id为msg的元素的宽度
$("#msg").width("300");       //将id为msg的元素的宽度设为300

$("input").val(");       //返回表单输入框的value值
$("input").val("test");       //将表单输入框的value值设为test

$("#msg").click();       //触发id为msg的元素的单击事件
$("#msg").click(fn);       //为id为msg的元素单击事件添加函数
同样blur,focus,select,submit事件都可以有着两种调用方法

5、集合处理功能,使用$('p').each(function(i){})对集合进行遍历,注意Each是一个函数,参数为function

对于jquery返回的集合内容无需我们自己循环遍历并对每个对象分别做处理,jquery已经为我们提供的很方便的方法进行集合的处理。包括两种形式,一种为$(obj).each(fun) 一种为$.each(obj,fun):

$("p").each(function(i){this.style.color=['#f00','#0f0','#00f']})      //为索引分别为0,1,2的p元素分别设定不同的字体颜色。

$("tr").each(function(i){this.style.backgroundColor=['#ccc','#fff'][i%2]})       //实现表格的隔行换色效果

$("p").click(function(){alert($(this).html())})              //为每个p元素增加了click事件,单击某个p元素则弹出其内容

$.each(obj, fn):通用的迭代函数。可用于近似地迭代对象和数组(代替循环)。如:

$.each( [0,1,2], function(i, n){ alert( "Item #" + i + ": " + n ); });

等价于:

var tempArr=[0,1,2];

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

       alert("Item #"+i+": "+tempArr);

}

也可以处理json数据,如

$.each( { name: "John", lang: "JS" }, function(i, n){ alert( "Name: " + i + ", Value: " + n ); });

结果为:

Name:name, Value:John

Name:lang, Value:JS


6、扩展我们需要的功能

$.extend({

       min: function(a, b){return a < b?a:b; },

       max: function(a, b){return a > b?a:b; }

});       //为jquery扩展了min,max两个方法

使用扩展的方法(通过“$.方法名”调用):

alert("a=10,b=20,max="+$.max(10,20)+",min="+$.min(10,20));

$.extend(target,prop1,propN):用一个或多个其他对象来扩展一个对象,返回这个被扩展的对象。这是jquery实现的继承方式。如:

$.extend(settings, options);  //合并settings和options,并将合并结果返回settings中,相当于options继承setting并将继承结果保存在setting中。

var settings = $.extend({}, defaults, options);//合并defaults和options,并将合并结果返回到setting中而不覆盖default内容。

可以有多个参数(合并多项并返回)

7、支持方法的连写
所谓连写,即可以对一个jquery对象连续调用各种不同的方法。例如:
$("p").click(function(){alert($(this).html())}).mouseover(function(){alert('mouse over event')}).each(function(i){this.style.color=['#f00','#0f0','#00f']});

8、操作元素的样式,主要包括以下几种方式:

$("#msg").css("background");              //返回元素的背景颜色

$("#msg").css("background","#ccc")       //设定元素背景为灰色

$("#msg").height(300); $("#msg").width("200");       //设定宽高

$("#msg").css({ color: "red", background: "blue" });//以名值对的形式设定样式

$("#msg").addClass("select");       //为元素增加名称为select的class

$("#msg").removeClass("select");       //删除元素名称为select的class

$("#msg").toggleClass("select");       //如果存在(不存在)就删除(添加)名称为select的class


9、完善的事件处理功能
Jquery已经为我们提供了各种事件处理方法,我们无需在html元素上直接写事件,而可以直接为通过jquery获取的对象添加事件。如:

$("#msg").click(function(){alert("good")})       //为元素添加了单击事件

$("p").click(function(i){this.style.color=['#f00','#0f0','#00f']}) //为三个不同的p元素单击事件分别设定不同的处理

jQuery中几个自定义的事件:
 (1)hover(fn1,fn2):一个模仿悬停事件(鼠标移动到一个对象上面及移出这个对象)的方法。当鼠标移动到一个匹配的元素上面时,会触发指定的第一个函数。当鼠标移出这个元素时,会触发指定的第二个函数。

   $("tr").hover(function(){  //当鼠标放在表格的某行上时将class置为over,离开时置为out。

       $(this).addClass("over");

    },

       function(){

       $(this).addClass("out");

    });

(2)ready(fn):当DOM载入就绪可以查询及操纵时绑定一个要执行的函数。

   $(document).ready(function(){alert("Load Success")})//页面加载完毕提示“Load Success”,相当于onload事件。与$(fn)等价

(3)toggle(evenFn,oddFn): 每次点击时切换要调用的函数。如果点击了一个匹配的元素,则触发指定的第一个函数,当再次点击同一元素时,则触发指定的第二个函数。随后的每次点击都重复对这两个函数的轮番调用。

       //每次点击时轮换添加和删除名为selected的class。

       $("p").toggle(function(){

              $(this).addClass("selected");   

       },function(){

              $(this).removeClass("selected");

       });

(4)trigger(eventtype): 在每一个匹配的元素上触发某类事件例如:

 $("p").trigger("click");              //触发所有p元素的click事件

(5)bind(eventtype,fn),unbind(eventtype): 事件的绑定与反绑定 从每一个匹配的元素中(添加)删除绑定的事件。例如:

$("p").bind("click", function(){alert($(this).text());});       //为每个p元素添加单击事件

$("p").unbind();       //删除所有p元素上的所有事件

$("p").unbind("click")       //删除所有p元素上的单击事件


10、几个实用特效功能
其中toggle()和slidetoggle()方法提供了状态切换功能。
如toggle()方法包括了hide()和show()方法。
slideToggle()方法包括了slideDown()和slideUp方法。

11、几个有用的jQuery方法
$.browser.浏览器类型:检测浏览器类型。有效参数:safari, opera, msie, mozilla。如检测是否ie:$.browser.isie,是ie浏览器则返回true。

$.map(array, fn):数组映射。把一个数组中的项目(处理转换后)保存到到另一个新数组中,并返回生成的新数组。如:

var tempArr=$.map( [0,1,2], function(i){ return i + 4; });

tempArr内容为:[4,5,6]

var tempArr=$.map( [0,1,2], function(i){ return i > 0 ? i + 1 : null; });

tempArr内容为:[2,3]

$.merge(arr1,arr2):合并两个数组并删除其中重复的项目

如:$.merge( [0,1,2], [2,3,4] )       //返回[0,1,2,3,4]

$.trim(str):删除字符串两端的空白字符。

如:$.trim("  hello, how are you?   ");        //返回"hello,how are you? "


12、解决自定义方法或其他类库与jQuery的冲突
很多时候我们自己定义了$(id)方法来获取一个元素,或者其他的一些js类库如prototype也都定义了$方法,如果同时把这些内容放在一起就会引起变量方法定义冲突,Jquery对此专门提供了方法用于解决此问题。
使用jquery中的jQuery.noConflict();方法即可把变量$的控制权让渡给第一个实现它的那个库或之前自定义的$方法。之后应用 Jquery的时候只要将所有的$换成jQuery即可,如原来引用对象方法$("#msg")改为jQuery("#msg")。
如:
jQuery.noConflict();
// 开始使用jQuery
jQuery("div   p").hide();
// 使用其他库的 $()
$("content").style.display = 'none';


下面几个jQuery的方法(1)load载入远程的HTML文件并插入至DOM中 (2)Get发送异步方式请求(3)发送Post异步方式请求 (4)ajax,其中get和post完全是ajax的简化版,具体可以参考下面详述(5)事件列表:局部事件和全局事件

来看一些简单的方法,这些方法都是对jQuery.ajax()进行封装以方便我们使用的方法,当然,如果要处理复杂的逻辑,还是需要用到jQuery.ajax()的(这个后面会说到).

1. load( url, [data], [callback] ) :载入远程 HTML 文件代码并插入至 DOM 中。

url (String) : 请求的HTML页的URL地址。

data (Map) : (可选参数) 发送至服务器的 key/value 数据。

callback (Callback) : (可选参数) 请求完成时(不需要是success的)的回调函数。

这个方法默认使用 GET 方式来传递的,如果[data]参数有传递数据进去,就会自动转换为POST方式的。jQuery 1.2 中,可以指定选择符,来筛选载入的 HTML 文档,DOM 中将仅插入筛选出的 HTML 代码。语法形如 "url #some > selector"。

这个方法可以很方便的动态加载一些HTML文件,例如表单。

示例代码:

$(".ajax.load").load("http://www.cnblogs.com/yeer/archive/2009/06/10/1500682.html .post",
function (responseText, textStatus, XMLHttpRequest){
this;//在这里this指向的是当前的DOM对象,即$(".ajax.load")[0]
//alert(responseText);//请求返回的内容 //alert(textStatus);//请求状态:success,error //alert(XMLHttpRequest);//XMLHttpRequest对象 });

 

2. jQuery.get( url, [data], [callback] ):使用GET方式来进行异步请求,Get方式和load方式方式基本类似,参数形式都差不多

参数:
url  (String) :  发送请求的URL地址.
data  (Map) : (可选) 要发送给服务器的数据, 以 Key/value 的键值对形式表示 ,会做为QueryString附加到请求URL中。

callback (Function) : (可选) 载入成功时回调函数(只有当Response的返回状态是success才是调用该方法)。

这是一个简单的 GET 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用 $.ajax。示例代码:

 $.get("./Ajax.aspx", {Action:"get",Name:"lulu"}, function (data, textStatus){
   //返回的 data 可以是 xmlDoc, jsonObj, html, text, 等等.
  this; // 在这里this指向的是Ajax请求的选项配置信息,请参考下图
  alert(data);
  //alert(textStatus);//请求状态:success,error等等。
   当然这里捕捉不到error,因为error的时候根本不会运行该回调函数
  //alert(this);
});

点击发送请求:

jQuery.get()回调函数里面的 this ,指向的是Ajax请求的选项配置信息:

image

 

3. jQuery.post( url, [data], [callback], [type] ) :使用POST方式来进行异步请求

参数:
url  (String) : 发送请求的URL地址.
data  (Map) : (可选) 要发送给服务器的数据,以 Key/value 的键值对形式表示。
callback  (Function) : (可选) 载入成功时回调函数(只有当Response的返回状态是success才是调用该方法)。

type (String) : (可选)官方的说明是:Type of data to be sent。其实应该为客户端请求的类型(JSON,XML,等等)

这是一个简单的 POST 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用 $.ajax。示例代码:

Ajax.aspx:

Response.ContentType = "application/json";
Response.Write("{result: '" + Request["Name"] + ",你好!(这消息来自服务器)'}");
jQuery 代码:
$.post("Ajax.aspx", { Action: "post", Name: "lulu" },
        function (data, textStatus){
// data 可以是 xmlDoc, jsonObj, html, text, 等等. //this; 这个Ajax请求的选项配置信息,请参考jQuery.get()说到的this
       alert(data.result);
}, "json");

点击提交,这里设置了请求的格式为"json":

image

如果你设置了请求的格式为"json",此时你没有设置Response回来的ContentType 为:Response.ContentType = "application/json"; 那么你将无法捕捉到返回的数据。

注意一下,alert(data.result); 由于设置了Accept报头为“json”,这里返回的data就是一个对象,并不需要用eval()来转换为对象。

4. jQuery.getScript( url, [callback] ) : 通过 GET 方式请求载入并执行一个 JavaScript 文件

参数
url  (String) : 待载入 JS 文件地址。

callback (Function) : (可选) 成功载入后回调函数。

jQuery 1.2 版本之前,getScript 只能调用同域 JS 文件。 1.2中,您可以跨域调用 JavaScript 文件。注意:Safari 2 或更早的版本不能在全局作用域中同步执行脚本。如果通过 getScript 加入脚本,请加入延时函数。

加载并执行 AjaxEvent.js ,成功后显示信息。

jQuery 代码:

$.getScript("AjaxEvent.js", function(){
alert("AjaxEvent.js 加载完成并执行完成.你再点击上面的Get或Post按钮看看有什么不同?"); });


下面开始说jQuery里面功能最强的Ajax请求方法 $.ajax();  

jQuery.ajax( options ) : 通过 HTTP 请求加载远程数据

这个是jQuery 的底层 AJAX 实现。简化版见 $.get, $.post 等,get和post封装了该方法,比如type类型,简化了ajax,只对成功的时候调用callback函数,不能对出错的情况进行处理,并且不能使用局部事件方法等。

$.ajax() 返回其创建的 XMLHttpRequest 对象。大多数情况下你无需直接操作该对象。

注意: 如果你指定了 dataType 选项,请确保服务器返回正确的 MIME 信息,(如 xml 返回 "text/xml")。错误的 MIME 类型可能导致不可预知的错误。当设置 datatype 类型为 'script' 的时候,所有的远程(不在同一个域中)POST请求都回转换为GET方式。

$.ajax() 只有一个参数:参数 key/value 对象,包含各配置及回调函数信息。详细参数选项见下。

jQuery 1.2 中,您可以跨域加载 JSON 数据,使用时需将数据类型设置为 JSONP。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。数据类型设置为 "jsonp" 时,jQuery 将自动调用回调函数。

参数列表:

参数名 类型 描述
url String (默认: 当前页地址) 发送请求的地址。
type String (默认: "GET") 请求方式 ("POST" 或 "GET"), 默认为 "GET"。注意:其它 HTTP 请求方法,如 PUT 和 DELETE 也可以使用,但仅部分浏览器支持。
timeout Number 设置请求超时时间(毫秒)。此设置将覆盖全局设置。
async Boolean (默认: true) 默认设置下,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为 false。注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。
beforeSend Function 发送请求前可修改 XMLHttpRequest 对象的函数,如添加自定义 HTTP 头。XMLHttpRequest 对象是唯一的参数。
function (XMLHttpRequest) {
this; // the options for this ajax request }
cache Boolean (默认: true) jQuery 1.2 新功能,设置为 false 将不会从浏览器缓存中加载请求信息。
complete Function 请求完成后回调函数 (请求成功或失败时均调用)。参数: XMLHttpRequest 对象,成功信息字符串。
function (XMLHttpRequest, textStatus) {
this; // the options for this ajax request }
contentType String (默认: "application/x-www-form-urlencoded") 发送信息至服务器时内容编码类型。默认值适合大多数应用场合。
data Object,
String
发送到服务器的数据。将自动转换为请求字符串格式。GET 请求中将附加在 URL 后。查看 processData 选项说明以禁止此自动转换。必须为 Key/Value 格式。如果为数组,jQuery 将自动为不同值对应同一个名称。如 {foo:["bar1", "bar2"]} 转换为 '&foo=bar1&foo=bar2'。
dataType String

预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息返回 responseXML 或 responseText,并作为回调函数参数传递,可用值:

"xml": 返回 XML 文档,可用 jQuery 处理。

"html": 返回纯文本 HTML 信息;包含 script 元素。

"script": 返回纯文本 JavaScript 代码。不会自动缓存结果。

"json": 返回 JSON 数据 。

"jsonp": JSONP 格式。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。

error Function (默认: 自动判断 (xml 或 html)) 请求失败时将调用此方法。这个方法有三个参数:XMLHttpRequest 对象,错误信息,(可能)捕获的错误对象。
function (XMLHttpRequest, textStatus, errorThrown) {
         // 通常情况下textStatus和errorThown只有其中一个有值 
         this; // the options for this ajax request
         }
global Boolean (默认: true) 是否触发全局 AJAX 事件。设置为 false 将不会触发全局 AJAX 事件,如 ajaxStart 或 ajaxStop 。可用于控制不同的Ajax事件
ifModified Boolean (默认: false) 仅在服务器数据改变时获取新数据。使用 HTTP 包 Last-Modified 头信息判断。
processData Boolean (默认: true) 默认情况下,发送的数据将被转换为对象(技术上讲并非字符串) 以配合默认内容类型 "application/x-www-form-urlencoded"。如果要发送 DOM 树信息或其它不希望转换的信息,请设置为 false。
success Function 请求成功后回调函数。这个方法有两个参数:服务器返回数据,返回状态
function (data, textStatus) {
         // data could be xmlDoc, jsonObj, html, text, etc...
         this; // the options for this ajax request
         }

这里有几个Ajax局部事件:beforeSend success complete ,error 。我们可以定义这些事件来很好的处理我们的每一次的Ajax请求。注意一下,这些Ajax事件里面的 this 都是指向Ajax请求的选项信息的(请参考说 get() 方法时的this的图片)。

示例代码,获取的cnblog.com上的文章题目:

$.ajax({
    type: "get",
    url: "http://www.cnblogs.com/rss",
    beforeSend: function(XMLHttpRequest){//ShowLoading();},
    success: function(data, textStatus){
$(".ajax.ajaxResult").html(""); $("item",data).each(function(i, domEle){ $(".ajax.ajaxResult").append("<li>"+$(domEle).children("title").text()+"</li>");
});}, complete: function(XMLHttpRequest, textStatus){//HideLoading();}, error: function(){//请求出错处理}
});

jQuery Ajax 事件

Ajax请求会产生若干不同的事件,我们可以订阅这些事件并在其中处理我们的逻辑。在jQuery这里有两种Ajax事件:局部事件 和 全局事件。全局事件和局部事件从名字上全局事件都以ajax为前缀,

局部事件就是在每次的Ajax请求时在方法内定义的,局部方法是在$.ajax上设置的,在上节知道$.ajax中全是key/value对,里面不仅仅可以设置局部方法还可以设置很多东东例如:

 $.ajax({beforeSend: function(){// Handle the beforeSend event},
         complete: function(){// Handle the complete event}
        // ...
 });

全局事件是每次的Ajax请求都会触发的,全局方法可以Bind方法绑定给具体的class或者直接使用class.全局事件方法,它会向DOM中的所有元素广播,全局事件可以如下定义:

 $("#loading").bind("ajaxSend", function(){$(this).show();})
              .bind("ajaxComplete", function(){$(this).hide();});

或者:

 $("#loading").ajaxStart(function(){$(this).show();}); 

我们可以在特定的请求将全局事件禁用,只要设置下 global 选项就可以了:

 $.ajax({url: "test.html",global: false,// 禁用全局Ajax事件.
   // ...
});

下面是jQuery官方给出的完整的Ajax事件列表:

  • running.beforeSend (LocalEvent)
  •             This event, which is triggered before an Ajax request is started, allows you to modify the                   XMLHttpRequest object (setting additional headers, if need be.)
  • error (LocalEvent)
                 This event is only called if an error occurred with the request (you can never have both an error and a success callback with a request).
  • complete (LocalEvent)
                This event is called regardless of if the request was successful, or not. You will always receive a complete callback, even for synchronous requests.
  • success (LocalEvent)
                This event is only called if the request was successful (no errors from the server, no errors with the data).
  • ajaxStart (Global Event) 
  •             This event is broadcast if an Ajax request is started and no other Ajax requests are currentlyajaxSend (Global Event)
                This global event is also triggered before the request is run.
    ajaxSuccess (Global Event)
                 This event is also only called if the request was successful.
    ajaxError (Global Event)
                  This global event behaves the same as the local error event.
    ajaxComplete (Global Event)
               This event behaves the same as the complete event and will be triggered every time an Ajax request finishes.
  • ajaxStop (Global Event)
               This global event is triggered if there are no more Ajax requests being processed.


    其他

    jQuery.ajaxSetup( options ) : 设置全局 AJAX 默认选项,在ajax前设置的默认选项,如果具体的ajax未设置将使用默认值,如下:

    设置 AJAX 请求默认地址为 "/xmlhttp/",禁止触发全局 AJAX 事件,用 POST 代替默认 GET 方法。其后的 AJAX 请求不再设置任何选项参数。

    jQuery 代码:

    $.ajaxSetup({
       url: "/xmlhttp/",
       global: false,
       type: "POST"
    });
    $.ajax({ data: myData });

     

    serialize() 与 serializeArray()

    serialize() : 序列表表格内容为字符串。

    serializeArray() : 序列化表格元素 (类似 '.serialize()' 方法) 返回 JSON 数据结构数据。

    示例,HTML代码:

    <p id="results"><b>Results: </b> </p>
    <form>
    <select name="single">
    <option>Single</option>
    <option>Single2</option>
    </select>
    <select name="multiple" multiple="multiple">
    <option selected="selected">Multiple</option>
    <option>Multiple2</option>
    <option selected="selected">Multiple3</option>
    </select><br/>
    <input type="checkbox" name="check" value="check1"/> check1
    <input type="checkbox" name="check" value="check2" checked="checked"/> check2
    <input type="radio" name="radio" value="radio1" checked="checked"/> radio1
    <input type="radio" name="radio" value="radio2"/> radio2
    </form>
  • serializeArray() 结果为:

    image

http://www.cnblogs.com/yeer/archive/2009/07/23/1529460.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值