.net中ajax有啥用法?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.net中ajax有啥用法?相关的知识,希望对你有一定的参考价值。
谁能告诉我,请能够详细点
谢谢啦!
XMLHttpRequest对象
对于Ajax技术的基础和核心,XMLHttpRequest对象应该是必须要了解的一个对象,Ajax实现的关键发送异步请求并接收响应执行回调都是 通过它来完成的。XMLHttpRequest最早是在Microsoft Internet Explorer 5.0以ActiveX组件中被引入的,之后各大浏览器厂商都以javascript内置对象的方式实现了XMLHttpRequest对象。虽然大家对 它的实现方式有所区别,但是绝大多数浏览器都提供了类似的属性和方法,在实际脚本编写方法上区别不大,并且实现得到的效果也基本相同,目前W3C正致力于 将XMLHttpRequest对象制定一个统一的标准使各个浏览器厂商遵照执行,以利于Ajax技术的推广与发展。
XMLHttpRequest提供了一个相对精简易用的API,下面我们就将简单地介绍一下它所提供的属性和方法以及怎么利用这些属性和方法完成一次Ajax的请求和响应处理。
readyState属性
当一个XMLHttpRequest对象被创建后,此属性标识了此对象正处于什么状态,可以通过对此属性的访问,来判断此次请求的状态是什么然后做出相应的操作。具体此属性的值代表的意义见表。
responseText属性
此属性描述的是一个HttpResponse中的全部文本内容,通过访问它,可以得到一次XMLHttpRequest得到响应回传的全部文本内容。只有当ReadyState的值为3或4时此属性才会有部分或者全部值,否则此属性只会是空字串。
responseXML属性
只有当 ReadyState属性为4,并且响应头部的Content-Type的MIME类型被指定为XML(text/xml或者 application/xml)时,此属性才会有值并且被解析为一个XML文档,否则此属性为Null。若是回传的XML文档结构不良或未完成响应回 传,此属性也会为Null,由此可见,此属性用来描述被XMLHttpRequest解析后的XML文档的属性。
status属性
用于描述服务器Http请求的状态值,通过此属性值可以判断服务器的响应状态,如通常通过判断status==200来判断服务器是否正常返回。但是注意,必须是日readyState为3或4时才能对此属性进行访问。
onreadystatechange事件
每当readyState发生改变时触发此事件,一般都通过此事件来触发回传处理函数。
open()方法
XMLHttpRequest 对象是通过open(method,uri,async,username,password)的方法来进行初始化工作的,通过调用此方法将得到一个可以 用来进行发送(send()方法)的对象。其中method参数是用来指定发送请求的HttpRequest类型,其值类型为字串,值可以为get、 post、put、delete等;uri参数是用来指定请求被发送到的服务器地址,该地址会被自动解析为绝对地址,所以在这里可以用相对地址来表示; async是一个类型为boolean类型的参数,默认情况下为true,此时表示为异步提交,如果希望发送一个同步请求可以将此值设为false;在服 务器需要验证访问用户的情况,可以设置username以及password两个参数。
当open()方法被调用时,XMLHttpRequest对象将会把readyState属性设为1,且初始化其他属性,如果此时一个请求正在被发送或者响应正在被接收,则前一请求的数据和内容将会丢失,请求将会被取消。
send()方法
当调用 open()方法后,就可以通过调用send()方法按照open()方法设定的参数将请求进行发送。当open()方法中async参数为true 时,在send()方法调用后立即return,否则将会中断直到请求返回。需要注意的是,send()方法必须在readyState为1时,即调用 open()方法以后调用。在调用send()方法以后到接收到响应头之前,readyState的值将被设为2,一旦开始接收到响应消息, readyState将会被设为3,直到响应接收完成,readyState的值才会被设为4。
abort()方法
该方法可以暂停一个HttpRequest的请求发送或是HttpResponse的接收,并且将XMLHttpRequest对象设置为初始化状态。
setRequestHeader()方法
该方法用于在调用open()方法后,设置HttpRequest头的信息,setRequestHeader(header,value)方法包含两个参数,前一个是header键名称,后一个是其值。
getResponseHeader()方法
此方法在readyState为3或4时,用于获取HttpResponse的头部信息,此外还可以通过getAllResponseHeaders()获取所有的HttpResponse的头部信息。
在搞清楚了XMLHttpRequest的这些基本属性方法以后,就可以开始编写第一个Ajax程序了。通过点击一个按钮然后通过Ajax的方式到服务端取回一个Hello world!的字符串显示在界面的一个文本框里。
在一个配置好的站点工程里面新建一个名为AjaxTest.aspx页面。首先在cs文件中的page_load事件函数中写下如下代码:
AjaxTest.aspx.cs:
protected void Page_Load(object sender, EventArgs e)
if (Request.QueryString["s"] == "1")//使用查询字串来指示这个请求是通过Ajax发出的
Response.Write("hello world!");//向HttpResponse中输出hello world!
Response.End();//将页面缓冲发送向客户端浏览器 并中止该页输出
//如果去掉这句 会得到多余的html代码
相对来说,在前台页面中书写的代码将会多一些,慢慢地会发现这也许是Ajax的一个惯例:
AjaxTest.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="AjaxTest.aspx.cs" Inherits= "AjaxTest" %>
<!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 runat="server">
<title>测试</title>
<script language="javascript" type="text/javascript">
<!--
function GetInfo()//就是通过这个函数来异步获取信息的
var xmlHttpReq = null;//声明一个空对象用来装入XMLHttpRequest
if (window.XMLHttpRequest)//除IE5 IE6 以外的浏览器XMLHttpRequest是window的子对象
xmlHttpReq = new XMLHttpRequest();//通常采用这种方式实例化一个XMLHttpRequest
else if (window.ActiveXObject)//IE5 IE6是以ActiveXObject的方式引入XMLHttpRequest的
xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
//IE5 IE6是通过这种方式
if(xmlHttpReq != null)//如果对象实例化成功 就可以干活啦
xmlHttpReq.open("get","AjaxTest.aspx?s=1",true);
//调用open()方法并采用异步方式
xmlHttpReq.onreadystatechange=RequestCallBack; //设置回调函数
xmlHttpReq.send(null);//因为使用get方式提交,所以可以使用null参调用
function RequestCallBack()//一旦readyState值改变,将会调用这个函数
if(xmlHttpReq.readyState == 4)
document.getElementById("iptText").value = xmlHttpReq.responseText;
//将xmlHttpReq.responseText的值赋给iptText控件
-->
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<input id="iptText" type="text" value="" />
<input type="button" id="" value="Ajax提交" onclick="GetInfo();" />
<!--点击这个按钮调用-->
</div>
</form>
</body>
</html>
如果在点击按钮的瞬间发现文本框内闪电般地出现了 “Hello world!”,那么恭喜,已经完成了一个Ajax调用。如果还对前台页面中那些和C#貌似神离的代码觉得不太明白,没关系,接下来就将来简单学习一下Ajax另外一个重要的部分——JavaScript。
参考技术A .net2003中ajax.dll用法webconfig配置
</system.web>
<httpHandlers>
<add verb="POST,GET" path="ajax/*.ashx" type="Ajax.PageHandlerFactory, Ajax" />
</httpHandlers>
</system.web>
定义一个类,执行服务器端操作,需要在客户端调用的方法头前加如下代码
[Ajax.AjaxMethod(Ajax.HttpSessionStateRequirement.Read)]
例如:
public class abc
[Ajax.AjaxMethod(Ajax.HttpSessionStateRequirement.Read)]
public string getResult(string hl,string jine)
try
Conn con=new Conn();
decimal a=con.GethuilvByName(hl);
decimal b=Decimal.Parse(jine);
return ((decimal)(a*b)).ToString();
catch (Exception ee)
Console.WriteLine(ee.Message);
return null;
pageload里注册此类
Ajax.Utility.RegisterTypeForAjax(typeof(abc));
前端js调用的时候类名.方法名
例
function getinformation()
var tmp = document.all("txtZhrmb");
var hl=document.all("DropDownList1").value;
var jine=document.all("txtJine").value;
tmp.value =abc.getResult(hl,jine).value;
Promise 和 AJAX 有啥区别?
【中文标题】Promise 和 AJAX 有啥区别?【英文标题】:What's the difference between Promise and AJAX?Promise 和 AJAX 有什么区别? 【发布时间】:2017-02-06 15:55:22 【问题描述】:promise 和 AJAX 调用都是异步操作。两者都可以发出 GET/POST 请求。 编辑:这是一个错误的陈述
那么它们之间有什么区别呢?什么时候最好使用一个而不是另一个?
另外,还有一件事:
最近我遇到了一个包含 AJAX 的 Promise。为什么将异步操作放在异步操作中?这就像把面包放在面包三明治里。
function threadsGet()
return new Promise((resolve, reject) =>
$.getJSON('api/threads')
.done(resolve)
.fail(reject);
)
这里使用jQuery。 AJAX 调用具有 Promise 行为和属性。我之前没有得到,但这是我的想法:
我们可以在 Promise 中做一些事情。然后使用 AJAX 调用并在 done
函数中传递已解析的 Promise 逻辑。特别是在这个例子中没有。
现在我发现我把两者都搞混了。它们几乎是两种不同的东西。仅仅因为它们是异步的,并不意味着它们可以互换。
==============
编辑 2: 只是一些我觉得有用的材料:
Promise Anti-Patterns
【问题讨论】:
你能澄清一下你说你可以用 promise 发出 GET/POST 请求是什么意思吗? Promise 本身没有发出 GET/POST 请求的机制。也许阅读Promises documentation? Promise 是异步操作的接口。 ajax 请求是一种非常具体的异步操作。 为什么不直接使用setTimeout
而不是ajax 调用呢?这也只是一个异步操作。
@Bergi,感谢您的评论。这让我很震惊。 Promise 主要是为了移除回调地狱。它可以与 AJAX 和其他东西一起使用。但最终,主要思想是以更易于管理和阅读的方式链接异步操作。人!我读了很多遍,但我才意识到这一点......
【参考方案1】:
您对 Promise 和 Ajax 调用感到困惑。它们有点像苹果和刀。你可以用刀切苹果,刀是一种可以应用于苹果的工具,但两者是完全不同的东西。
Promises 是一种管理异步操作的工具。它们跟踪异步操作何时完成以及它们的结果是什么,并让您将完成和这些结果(包括错误条件)与其他代码或其他异步操作进行协调。它们本身实际上并不是异步操作。 Ajax 调用是一种特定的异步操作,可以与传统的回调接口一起使用,也可以包装在 Promise 接口中。
那么它们之间有什么区别呢?什么时候最好使用 一个而不是另一个?
Ajax 调用是一种特定类型的异步操作。您可以使用XMLHttpRequest
interface 使用传统回调进行Ajax 调用,也可以使用fetch()
interface 使用promise 进行Ajax 调用(在现代浏览器中)。
最近我遇到了一个包含 AJAX 的 Promise。为什么 将异步操作放在异步操作中?这就像放 面包三明治中的面包。
您没有显示您正在谈论的具体代码,但有时您想要启动异步操作 1,然后当该异步操作完成时,您希望他们启动异步操作 2(通常使用第一个的结果一)。在这种情况下,您通常会将一个嵌套在另一个中。
您的代码示例:
function threadsGet()
return new Promise((resolve, reject) =>
$.getJSON('api/threads')
.done(resolve)
.fail(reject);
)
被认为是一个 Promise 反模式。没有理由在这里创建一个新的承诺,因为$.getJSON()
已经返回了一个你可以返回的承诺。你可以这样做:
function threadsGet()
return $.getJSON('api/threads');
或者,如果你想将有点不标准的 jQuery 承诺“转换”为标准承诺,你可以这样做:
function threadsGet()
return Promise.resolve($.getJSON('api/threads'));
【讨论】:
谢谢!用 Promise 中的 AJAX 示例更新了我的问题。我已经有了这个想法。 :) 非常感谢您的更新!我什至不知道承诺有好的/坏的做法。我喜欢你优化的代码。它更容易理解和优雅。在我发布的代码中让我很困惑的是 - Ajax 解决了外部承诺的成功,并且(最终)失败了它的错误。但现在很清楚了。 :)以上是关于.net中ajax有啥用法?的主要内容,如果未能解决你的问题,请参考以下文章
asp.net的NewRow()、Rows是有啥作用?有啥用法呢?
Jquery中$.get(),$.post(),$.ajax(),$.getJSON(),$.getScript(),$.load()的用法总结