jQuery入门[5]-AJAX

jQuery入门[1]-构造函数
jQuery入门[2]-选择器
jQuery入门[3]-事件
jQuery入门[4]-链式代码
jQuery入门[5]-AJAX
jQuery入门[6]-动画
jQuery为AJAX提供了非常丰富的支持,参见Ajax
其中最基本当属$ajax(),通过不同的参数,这个方法可以录活支持各种AJAX应用场景。如:
$.ajax({
url: "test.html",
cache: false,
success: function(html){
$("#results").append(html);
}
});
完整参数列表参见:options
当然,常用的应该是这些:
  • load()--直接将AJAX请求结果作为jQuery对象内容
  • $.get()--用get方式请求
  • $.post()--用post方式提交
  • ajaxStart()/ajaxComplete()/ajaxError()……--全局的ajax事件响应

DEMO:
建一个GenericHandler作AJAX请求服务端:CubeHandler.ashx
<%@ WebHandler Language="C#" Class="CubeHandler" %>

using System;
using System.Web;

public class CubeHandler : IHttpHandler {
    
    
public void ProcessRequest (HttpContext context) {
        context.Response.ContentType 
= "text/plain";
        
int number = 0;
        
int.TryParse(context.Request.Params["number"], out number);
        context.Response.StatusCode 
= 200;
        context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
        context.Response.Write(
string.Format("{0} cubed is {1}",number,Math.Pow(number, 3)));
    }
 
    
public bool IsReusable {
        
get {
            
return true;
        }
    }
}
因为用的是Request.Params,所以这个handler能同时支持get和post,
<!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>ajax</title>
    
<script src="../scripts/jquery-1.2.3.intellisense.js" type="text/javascript"></script>
    
<script type="text/javascript">
        $(
function(){
            
//设置指示器
            $('#divIndicator').ajaxStart(function(){$(this).show()})
                            .ajaxSuccess(
function(){$(this).hide()})
                            .ajaxError(
function(msg){$(this).hide();alert(msg);});
            
//ajax get 请求
            $('#btnGetCubeInGet').click(function(){
                
var number = $('#txtNumber').val();
                $.get(
'CubeHandler.ashx?number='+number,function(result){
                    alert(result);
                });
            });
            
            
//ajax post 提交
            $('#btnGetCubeInPost').click(function(){
                
var number = $('#txtNumber').val();
                $.get(
'CubeHandler.ashx',{'number':number},function(result){
                    alert(result);
                });
            });
        });
    
</script>
    
<style type="text/css">
        .indicator
        
{
            color
: #FF0000;
            position
: absolute;
            top
: 0px;
            right
: 0px;
            display
: none;
        
}
    
</style>
</head>
<body>
    
<div id="divIndicator" class="indicator">
        
<img src="indicator.gif" />loading</div>
    plz input a number:
<input id="txtNumber" />
    
<input type="button" id="btnGetCubeInGet" value="Get cube(get)" />
    
<input type="button" id="btnGetCubeInPost" value="Get cube(post)" />
</body>
</html>

点击按钮后的效果:

posted @ 2008-03-05 16:34 Think 阅读(14504) 评论(12) 编辑 收藏

 回复 引用 查看   
#1楼2008-08-19 17:10 | Myhsg      
LZ是大牛啊
佩服

 回复 引用 查看   
#2楼2008-09-20 18:05 | Doho      
//ajax post 提交
$('#btnGetCubeInPost').click(function(){
var number = $('#txtNumber').val();
$.get('CubeHandler.ashx', { 'number': number }, function(result) {
alert(result);
});
});
小问题:
$.get应该是:$.post

 回复 引用 查看   
#3楼2008-11-07 11:28 | YJJ      
很不错
 回复 引用 查看   
#4楼2008-12-30 16:12 | Ken Wang      
@Doho
确实应该是.post,否则请求仍然是用的GET方法。

 回复 引用 查看   
#5楼2009-04-10 14:35 | 云海山      
我的效果出不来呀,没有按钮,页面上只有“0 cubed is 0”
 回复 引用 查看   
#6楼2009-05-21 17:26 | 咸鱼翻身      
那是你没有输入数据
所以才显示0
无论是post还是get结果都是一样的。

 回复 引用 查看   
#7楼2009-05-26 22:29 | springkang      
手工一个字一个字敲进去,运行后点击按钮没反应,
将网页上的代码复制粘贴上去,运行正常.
查看了代码,录的一模一样啊,怎么会这样???

 回复 引用   
#8楼2009-09-17 14:35 | 青烟客[未注册用户]
点“Get cube(post)”貌似没反应!
 回复 引用   
#9楼2009-09-17 14:40 | 青烟客[未注册用户]
真是奇怪,情况和7楼的一样!
 回复 引用 查看   
#10楼2009-09-29 12:20 | virus      
老兄,你看一下我的这段代码,目的是定时从webservice获取数据,如果有数据就变化字体颜色,没有就停止变换。是加到sharepoint的masterpage中的,可是没有运行,你帮我看看结构对不

<script>
function todayReminderColor(){

//变换颜色
}
var timerReminder;
var timerReminderColor;
function todayReminder(){
$.get("test.ashx",function(data){

if(data=="{contains:&apos;true&apos;}")
{
timerReminderColor=setInterval(" todayReminderColor()",500);
}else
{
clearTimeout(timerReminderColor);
}
});
}
$(document).ready(function(){
timerReminder=setInterval("todayReminder()",6000);
});
function stopTimer()
{
clearTimeout(timerReminder);
clearTimeout(timerReminderColor);
}

</script>

 回复 引用 查看   
#11楼[楼主]2009-09-29 15:13 | Think      
@virus
setInterval和clearTimeout不是一对的,setInterval(todayReminder,6000)