什么是Ajax请求,Ajax也就是“Asynchronous JavaScript and XML”(异步JavaScript和XML),无刷新数据读取。能减少流量的消耗,也提高了浏览的流畅性,给用户更加友好的体验。

发送Ajax请求也就几步便可完成

第一步:创建异步对象

var xhr = new XMLHttpRequest();

这样创建的异步对象是给新版的浏览器用的,当然不乏一些用着旧版浏览器的老客户。旧版的创建方法如下:

var xhr = new ActiveXObject('Microsoft.XMLHTTP');

这样我们可以写出如下形式来兼容两个类型的浏览器

var xhr = null;
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest();
}else{
xhr = new ActiveXObject('Microsoft.XMLHTTP');
}

第二步:设置参数

get方法:xhr.open('get', 'DataResponse.ashx', true);

post方法:xhr.open("post", "DataResponse.ashx", true);

两个方式的区别自己去百度了,无非就是通过什么方式向发送请求的地址发送数据

第三步:设置编码头

这一步其实可以忽略:

get方法:

                //让get请求不从浏览器获取缓存数据(可去)
xhr.setRequestHeader("If-Modified-Sine", "0");

       post方法

                //编码格式
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

  设置这个报文头的具体作用都写在了上面,貌似post方法中,这个设置编码格式是一定要弄的,不然会得不到数据

第四步:发送数据

xhr.send();

其中括号中可以放置要发送的数据,没有想发送的数据便留空。

自己做的一个小型网站来演示下:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Get.aspx.cs" Inherits="test.Get" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<script type="text/javascript">
window.onload = function () {
//javascript 的Ajax get方法
document.getElementById("getAjax").onclick = function () {
//向服务器请求时间,创建异步对象
var xhr = new XMLHttpRequest();
//设置参数
xhr.open('get', 'DataResponse.ashx', true);
//让get请求不从浏览器获取缓存数据(可去)
xhr.setRequestHeader("If-Modified-Sine", "");
//设置回调函数
xhr.onreadystatechange = function () {
if (xhr.readyState == && xhr.status == ) {
var res = xhr.responseText;
alert(res);
}
}
//发送数据
xhr.send();
}
//javascript 的Ajax Post方法
document.getElementById("postAjax").onclick = function () {
//向服务器请求时间,创建异步对象
var xhr = new XMLHttpRequest();
//设置参数
xhr.open("post", "DataResponse.ashx", true);
//编码格式
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
//设置回调函数
xhr.onreadystatechange = function () {
if (xhr.readyState == && xhr.status == ) {
var res = xhr.responseText;
alert(res);
}
}
xhr.send();
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
get请求按钮:
<input type="button" id="getAjax" value="点击发送请求"/><br/>
post请求按钮:
<input type="button" id="postAjax" value="点击发送请求"/>
</div>
<img src="test.gif" />
</form>
</body>
</html>

这样便能看到这样的效果:

在服务器端,通过判断不同的请求方式来返回不同的数据给浏览器:

public void ProcessRequest(HttpContext context)
{
if(context.Request.HttpMethod.ToLower()=="get")
{
Thread.Sleep();
context.Response.Write("这是一个get请求,成功返回数据");
}
else
{
Thread.Sleep();
context.Response.Write("这是一个post请求,成功返回数据");
}
}

这里的Thread.Sleep(1000);主要是用来模拟浏览器向服务器请求数据这个过程,然后通过中间的gif图片来判断这个Ajax异步请求是怎样一回事,可以看到点击后,有那么服务器那边停缓了一秒钟,然而整个过程中gif图片没有停下来,然后请求完毕后不能后退,因此Ajax请求后还是以前这个页面,没有跳转,这样给客户的体验就增强了。最后附上整个项目源码:

http://files.cnblogs.com/xmfdsh/javascript%E7%89%88Ajax.rar

javascript版Ajax请求的更多相关文章

  1. 原生javaScript完成Ajax请求

    使用原生javaScript完成Ajax请求,首先应该创建一个对象XMLHttprequest,考虑到兼容低版本IE浏览器,使用ActiveXObject对象,代码入下: var request; i ...

  2. 转贴:JavaScript实现Ajax请求简单示例

    转至:https://my.oschina.net/u/658145/blog/167651 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 ...

  3. JavaScript原生Ajax请求纯文本数据

    源代码 ajax1.html: <!DOCTYPE html> <html> <head> <meta charset="utf-8"&g ...

  4. 前端javascript发送ajax请求、后台书写function小案例

    HTML端页面: <td> <input class="pp_text" type="text" name="" valu ...

  5. javascript原生ajax请求

    class Ajax{ constructor(url, method, data, callback_suc, callback_err, callback_run){ this.RT = true ...

  6. JavaScript 伪Ajax请求

    伪Ajax 通过iframe以及form表单,可以实现伪Ajax的方式. 并且它的兼容性是最好的. iframe iframe标签能够获取一个其他页面的文档内容,这说明它内部肯定是发送了一个请求,并且 ...

  7. JavaScript的Ajax请求示例

    //创建XMLHttpRequest对象              var request = false;            try {                request = new ...

  8. 原生js版ajax请求

    function getXMLHttpRequest() { var xhr; if(window.ActiveXObject) { xhr= new ActiveXObject("Micr ...

  9. PHP 判断是否为 AJAX 请求

    先说前端使用 jQuery 时怎么区分: jQuery 发出 ajax 请求时,会在请求头部添加一个名为 X-Requested-With 的信息,信息内容为:XMLHttpRequest 在后端可以 ...

随机推荐

  1. 模拟新浪微博textarea,刷新页面输入信息保留

    今天我们的产品经理提出一个新需求,模拟新浪微博textarea框,输入内容刷新页面保留信息. 我是用的方法是Html5 LocalStorage存储的,开始计划用cookie.或mysql存储,尝试了 ...

  2. Entity Framework 5问题集锦

    ORM框架万万千,一直都使用NHibernate,没用过其他的.最近闲来学习下微软自家的Entity Framework,记录一些我学习过程中遇到的头疼问题.(不断更新中...) 教程:http:// ...

  3. 什么是PHP魔术引号

    今天在读EcShop的源码中发现里面有几个地方涉及到了PHP魔术引号,之前也碰到过都忽略过去了,再次碰到该深入的理解,虽然自PHP 5.3.0 起魔术引号被废弃废弃并将自 PHP 5.4.0 起移除, ...

  4. Oracle 11g 之自动收集统计信息

    在Oracle的11g版本中提供了统计数据自动收集的功能.在部署安装11g Oracle软件过程中,其中有一个步骤便是提示是否启动这个功能(默认是启用这个功能). 1.查看自动收集统计信息的任务及状态 ...

  5. SQLserver查询数据库所有字段-表名

    SELECT * FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME='Account' SELECT (case when a.colorder=1 t ...

  6. linux log find 查询

    常用的日志查询命令:find 1.从根目录开始查找所有扩展名为.log的文本文件,并找出包含”ERROR”的行: find / -type f -name "*.log" | xa ...

  7. Douglas Crockford: entityify & deentityify

    大神之字符与字符实体的相互转换方法 // & to & if (!String.prototype.entityify) { String.prototype.entityify = ...

  8. NFC framework

    NFC framework introduce 1 NFC简介 对于NFC,是google在android4.0上推出来的,简单介绍下.近场通讯(NFC)是一系列短距离无线技术,一般需要4cm或者更短 ...

  9. [转]va_start和va_end使用详解

    转载地址:http://www.cnblogs.com/hanyonglu/archive/2011/05/07/2039916.html  本文主要介绍va_start和va_end的使用及原理. ...

  10. iOS学习之UI自定义cell

    一.自定义Cell 为什么需要自定义cell:系统提供的cell满足不了复杂的样式,因此:自定义Cell和自定义视图一样,自己创建一种符合我们需求的Cell并使用这个Cell.如下图所示的这些Cell ...