php异步请求求失败证券怎么回事

IOS之请求、请求、GET请求、POST请求
1、同步请求可以从因特网,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作,
2、异步请求不会阻塞主,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行
3、GET请求,将参数直接写在访问路径上。操作简单,不过容易被外界看到,不高,地址255字节;
4、POST请求,将参数放到body里面。POST请求操作相对复杂,需要将参数和地址分开,不过安全性高,参数放在body里面,不易被捕获。
1、&&&&&同步GET请求
&&& //第一步,创建URL
&&& NSURL *url = [NSURL URLWithString:@"/iphonexml.do?type=focus-c"];
&&& //第二步,通过URL创建网络请求
&&& NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
&&& //NSURLRequest初始化方法第一个参数:请求访问路径,第二个参数:,第三个参数:网络请求时间(秒)
&&&&&&其中缓存协议是个类型包含:
&&&&& NSURLRequestUseProtocolCachePolicy(基础策略)
&&&&& NSURLRequestReloadIgnoringLocalCacheData(忽略本地缓存)
&&&&& NSURLRequestReturnCacheDataElseLoad(首先使用缓存,如果没有本地缓存,才从原地址下载)
&&&&& NSURLRequestReturnCacheDataDontLoad(使用本地缓存,从不下载,如果本地没有缓存,则请求失败,此策略多用于离线操作)
&&&&& NSURLRequestReloadIgnoringLocalAndRemoteCacheData(无视任何缓存策略,无论是本地的还是的,总是从原地址重新下载)
&&&&& NSURLRequestReloadRevalidatingCacheData(如果本地缓存是有效的则不下载,其他任何情况都从原地址重新下载)
&&& //第三步,连接服务器
&&& NSData *received = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
&&& NSString *str = [[NSString alloc]initWithData:received encoding:NSUTF8StringEncoding];
&&& NSLog(@"%@",str);
2、同步POST请求
&&& //第一步,创建URL
&&& NSURL *url = [NSURL URLWithString:@"/iphonexml.do"];
&&& //第二步,创建请求
&&& NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
&&& [request setMethod:@"POST"];//设置请求方式为POST,默认为GET
&&& NSString *str = @"type=focus-c";//设置参数
&&& NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
&&& [request setHTTPBody:data];
&&& //第三步,连接服务器
&&& NSData *received = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
&&& NSString *str1 = [[NSString alloc]initWithData:received encoding:NSUTF8StringEncoding];
&&& NSLog(@"%@",str1);
3、异步GET请求
&&& //第一步,创建url
&&& NSURL *url = [NSURL URLWithString:@"/iphonexml.do?type=focus-c"];
&&& //第二步,创建请求
&&& NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
&&& //第三步,连接服务器
&&& NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];
4、异步POST请求
&&& //第一步,创建url
&&& NSURL *url = [NSURL URLWithString:@"/iphonexml.do"];
&&& //第二步,创建请求
&&& NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
&&& [request setHTTPMethod:@"POST"];
&&& NSString *str = @"type=focus-c";
&&& NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
&&& [request setHTTPBody:data];
&&& //第三步,连接服务器
&&& NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];
5、异步请求的代理方法
//接收到服务器回应的时候调用此方法
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
&&& NSHTTPURLResponse *res = (NSHTTPURLResponse *)
&&& NSLog(@"%@",[res allHeaderFields]);
&&& self.receiveData = [NSMutableData data];
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//接收到服务器传输数据的时候调用,此方法根据数据大小执行若干次
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
&&& [self.receiveData appendData:data];
//数据传完之后调用此方法
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
&&& NSString *receiveStr = [[NSString alloc]initWithData:self.receiveData encoding:NSUTF8StringEncoding];
&&& NSLog(@"%@",receiveStr);
//网络请求过程中,出现任何(断网,连接超时等)会进入此方法
-(void)connection:(NSURLConnection *)connection
&didFailWithError:(NSError *)error
&&& NSLog(@"%@",[error localizedDescription]);异步刷新问题_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
163页免费20页免费3页免费3页免费2页免费9页1下载券1页免费1页免费137页2下载券7页免费
喜欢此文档的还喜欢2页免费25页1下载券10页免费2页免费54页1下载券
异步刷新问题|异​步​刷​新​问​题​介​绍
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢您所在的位置: &
使用JavaScript和Ajax发出异步请求(1)
使用JavaScript和Ajax发出异步请求(1)
developerWorks 中国
本文Brett McLaughlin 介绍了如何创建能够适应不同浏览器的 XMLHttpRequest 实例,建立和发送请求,并响应服务器。
多数 Web 应用程序都使用请求/响应模型从服务器上获得完整的 HTML 页面。常常是点击一个按钮,等待服务器响应,再点击另一个按钮,然后再等待,这样一个反复的过程。有了 Ajax 和 XMLHttpRequest 对象,就可以使用不必让用户等待服务器响应的请求/响应模型了。本文中,Brett McLaughlin 介绍了如何创建能够适应不同浏览器的 XMLHttpRequest 实例,建立和发送请求,并响应服务器。
本文中,您将开始接触最基本和基础性的有关 Ajax 的全部对象和编程方法:XMLHttpRequest 对象。该对象实际上仅仅是一个跨越所有 Ajax 应用程序的公共线程,您可能已经预料到,只有彻底理解该对象才能充分发挥编程的潜力。事实上,有时您会发现,要正确地使用 XMLHttpRequest,显然不能 使用 XMLHttpRequest。这到底是怎么回事呢?
Web 2.0 一瞥
在深入研究代码之前首先看看最近的观点 ―― 一定要十分清楚 Web 2.0 这个概念。听到 Web 2.0 这个词的时候,应该首先问一问 “Web 1.0 是什么?” 虽然很少听人提到 Web 1.0,实际上它指的就是具有完全不同的请求和响应模型的传统 Web。比如,到
网站上点击一个按钮或者输入搜索项。就会对服务器发送一个请求,然后响应再返回到浏览器。该请求不仅仅是图书和书目列表,而是另一个完整的 HTML 页面。因此当 Web 浏览器用新的 HTML 页面重绘时,可能会看到闪烁或抖动。事实上,通过看到的每个新页面可以清晰地看到请求和响应。
Web 2.0(在很大程度上)消除了这种看得见的往复交互。比如访问 Google Maps 或 Flickr 这样的站点。比如在 Google Maps 上,您可以拖动地图,放大和缩小,只有很少的重绘操作。当然这里仍然有请求和响应,只不过都藏到了幕后。作为用户,体验更加舒适,感觉很像桌面应用程序。这种新的感受和范型就是当有人提到 Web 2.0 时您所体会到的。
需要关心的是如何使这些新的交互成为可能。显然,仍然需要发出请求和接收响应,但正是针对每次请求/响应交互的 HTML 重绘造成了缓慢、笨拙的 Web 交互的感受。因此很清楚,我们需要一种方法使发送的请求和接收的响应只 包含需要的数据而不是整个 HTML 页面。惟一需要获得整个新 HTML 页面的时候就是希望用户看到 新页面的时候。
但多数交互都是在已有页面上增加细节、修改主体文本或者覆盖原有数据。这些情况下,Ajax 和 Web 2.0 方法允许在不 更新整个 HTML 页面的情况下发送和接收数据。对于那些经常上网的人,这种能力可以让您的应用程序感觉更快、响应更及时,让他们不时地光顾您的网站。
XMLHttpRequest 简介
要真正实现这种绚丽的奇迹,必须非常熟悉一个 JavaScript 对象,即 XMLHttpRequest。这个小小的对象实际上已经在几种浏览器中存在一段时间了,它是本专栏今后几个月中要介绍的 Web 2.0、Ajax 和大部分其他内容的核心。为了让您快速地大体了解它,下面给出将要用于该对象的很少的几个 方法和属性。
open():建立到服务器的新请求。
send():向服务器发送请求。
abort():退出当前请求。
readyState:提供当前 HTML 的就绪状态。
responseText:服务器返回的请求响应文本。
如果不了解这些(或者其中的任何 一个),您也不用担心,后面几篇文章中我们将介绍每个方法和属性。现在应该了解的是,明确用 XMLHttpRequest 做什么。要注意这些方法和属性都与发送请求及处理响应有关。事实上,如果看到 XMLHttpRequest 的所有方法和属性,就会发现它们都 与非常简单的请求/响应模型有关。显然,我们不会遇到特别新的 GUI 对象或者创建用户交互的某种超极神秘的方法,我们将使用非常简单的请求和非常简单的响应。听起来似乎没有多少吸引力,但是用好该对象可以彻底改变您的应用程序。
简单的 new
首先需要创建一个新变量并赋给它一个 XMLHttpRequest 对象实例。这在 JavaScript 中很简单,只要对该对象名使用 new 关键字即可,如 清单 1 所示。
清单 1. 创建新的 XMLHttpRequest 对象
<script language="javascript" type="text/javascript">var request = new XMLHttpRequest();</script>
不难吧?记住,JavaScript 不要求指定变量类型,因此不需要像 清单 2 那样做(在 Java 语言中可能需要这样)。
清单 2. 创建 XMLHttpRequest 的 Java 伪代码
XMLHttpRequest request = new XMLHttpRequest();
因此在 JavaScript 中用 var 创建一个变量,给它一个名字(如 “request”),然后赋给它一个新的 XMLHttpRequest 实例。此后就可以在函数中使用该对象了。
在实际上各种事情都可能出错,而上面的代码没有提供任何错误处理。较好的办法是创建该对象,并在出现问题时优雅地退出。比如,任何较早的浏览器(不论您是否相信,仍然有人在使用老版本的 Netscape Navigator)都不支持 XMLHttpRequest,您需要让这些用户知道有些地方出了问题。清单 3 说明如何创建该对象,以便在出现问题的时候发出 JavaScript 警告。
清单 3. 创建具有错误处理能力的 XMLHttpRequest
<script language="javascript" type="text/javascript">var request =try {request = new XMLHttpRequest();} catch (failed) {request =}if (!request)alert("Error initializing XMLHttpRequest!");</script>
一定要理解这些步骤:
1. 创建一个新变量 request 并赋值 false。后面将使用 false 作为判定条件,它表示还没有创建 XMLHttpRequest 对象。2. 增加 try/catch 块:尝试创建 XMLHttpRequest 对象。如果失败(catch (failed))则保证 request 的值仍然为 false。3. 检查 request 是否仍为 false(如果一切正常就不会是 false)。4. 如果出现问题(request 是 false)则使用 JavaScript 警告通知用户出现了问题。
代码非常简单,对大多数 JavaScript 和 Web 开发人员来说,真正理解它要比读写代码花更长的时间。现在已经得到了一段带有错误检查的 XMLHttpRequest 对象创建代码,还可以告诉您哪儿出了问题。
应付 Microsoft
看起来似乎一切良好,至少在用 Internet Explorer 试验这些代码之前是这样的。如果这样试验的话,就会看到 图 1 所示的糟糕情形。
图 1. Internet Explorer 报告错误
498)this.width=498;' onmousewheel = 'javascript:return big(this)' src="/files/uploadimg/2500.jpg">
显然有什么地方不对劲,而 Internet Explorer 很难说是一种过时的浏览器,因为全世界有 70% 在使用 Internet Explorer。换句话说,如果不支持 Microsoft 和 Internet Explorer 就不会受到 Web 世界的欢迎!因此我们需要采用不同的方法处理 Microsoft 浏览器。
经验证发现 Microsoft 支持 Ajax,但是其 XMLHttpRequest 版本有不同的称呼。事实上,它将其称为几种 不同的东西。如果使用较新版本的 Internet Explorer,则需要使用对象 Msxml2.XMLHTTP,而较老版本的 Internet Explorer 则使用 Microsoft.XMLHTTP。我们需要支持这两种对象类型(同时还要支持非 Microsoft 浏览器)。请看看 清单 4,它在前述代码的基础上增加了对 Microsoft 的支持。
清单 4. 增加对 Microsoft 浏览器的支持
<script language="javascript" type="text/javascript">var request =try {request = new XMLHttpRequest();} catch (trymicrosoft) {try {request = new ActiveXObject("Msxml2.XMLHTTP");} catch (othermicrosoft) {try {request = new ActiveXObject("Microsoft.XMLHTTP");} catch (failed) {request =}}}if (!request)alert("Error initializing XMLHttpRequest!");</script>
很容易被这些花括号迷住了眼睛,因此下面分别介绍每一步:
1. 创建一个新变量 request 并赋值 false。使用 false 作为判断条件,它表示还没有创建 XMLHttpRequest 对象。
2. 增加 try/catch 块:
尝试创建 XMLHttpRequest 对象。
如果失败(catch (trymicrosoft)):1). 尝试使用较新版本的 Microsoft 浏览器创建 Microsoft 兼容的对象(Msxml2.XMLHTTP)。2). 如果失败(catch (othermicrosoft))尝试使用较老版本的 Microsoft 浏览器创建 Microsoft 兼容的对象(Microsoft.XMLHTTP)。
如果失败(catch (failed))则保证 request 的值仍然为 false。
3. 检查 request 是否仍然为 false(如果一切顺利就不会是 false)。
4. 如果出现问题(request 是 false)则使用 JavaScript 警告通知用户出现了问题。
这样修改代码之后再使用 Internet Explorer 试验,就应该看到已经创建的表单(没有错误消息)。我实验的结果如 图 2 所示。
498)this.width=498;' onmousewheel = 'javascript:return big(this)' src="/files/uploadimg/2501.jpg">
图 2. Internet Explorer 正常工作
关于&&的更多文章
近来人们对微软的ASP.NET MVC框架投入了越来越多的关注。ASP.NET
网友评论TOP5
本次的专刊为大家提供了Oracle最新推出的Java SE 8详细的开发教程,从解读到探究Java 8最新
当年,雅虎的信息中枢曾经是互联网用户的第一入口,Go
“百度世界”是由百度公司举办的一年一度针对用户、客
Node.js是一个使用了Google高性能V8引擎的服务器端Jav
本书是关于EJB 3.0的专业技术教程,专注于EJB的概念、方法、开发过程的介绍。同时,本书还研究许多高端的EJB知识,使得开发者能
51CTO旗下网站之前该应用一直工作正常,突然有一天不能正常获取数据,跟踪该请求后发现,
&Failed to set the 'timeout' property on 'XMLHttpRequest': timeouts cannot be set for synchronous requests made from a document.&
猜测可能原因是因为浏览器升级!
处理方法:
修改ext-base.js方法中
makeRequest : function(method, uri, callback, postData, options)方法的
&if(callback && callback.timeout)
if(callback && callback.timeout && options.async)
Ext.Ajax.request发送同步请求---基于ext-basex&
首先从&下载ext-basex
脚本文件,解压后按照说明readme文件的方法引用EXT库和ext-basex。&
&link rel=&stylesheet& type=&text/css& href=&../lib/ext-3.0+/resources/css/ext-all.css& /&&
&script type=&text/javascript& src=&../lib/ext-3.0+/adapter/ext/ext-base.js&&&/script&&
&script type=&text/javascript& src=&../lib/ext-3.0+/ext-all[-debug].js&&&/script&&
&script type=&text/javascript& src=&../lib/ux/ext-basex[-debug].js&&&/script&&
然后使用Ext.Ajax.request方法,添加 async: false,&& //ASYNC 是否异步( TRUE 异步 , FALSE 同步),其他参数不变。&
&&&&&&& Ext.Ajax.request({&
&&&&&&&&&&& url: &StreamingProxy.ashx&,&&&&
&&&&&&&&&&& method: &GET&,&
&&&&&&&&&&async: false,&& //ASYNC 是否异步( TRUE 异步 , FALSE 同步)&
&&&&&&&&&&& success: function(response, opts) {&
&&&&&&&&&&& }, //请求成功的回调函数&
&&&&&&&&&&& failure: function() { alert(&获取目录请求失败!&); } // 请求失败的回调函数&
&&&&&&& });&
注意:做了以上操作后在IE、google chrome、firefox11下是没有问题的,但到了firefox12下去看,就发现执行这个的时候一直执行的是失败,也就是走到failure中去了。&
Ext.Ajax.request({&
url : 'UserValidate',&
method : 'post',&
params : {&
type : 'checksession'&
async : false, // async 是否异步( true 异步 , false 同步)&
success : function(response, opts) {&
alert('response.responseText:'+response.responseText);&
var val = Ext.util.JSON.decode(response.responseText);&
if (val.nosession) {&
window.location.href = &index.html&;&
failure : function(response,options) {&
alert('4');&
alert('failure response.responseText:'+response.responseText);&
window.location.href = &index.html&;&
如果加上“async : false, // async 是否异步( true 异步 , false 同步)”则在firefox中无法执行EXt.ajax.request请求,也就是老跑到failure中去,这个同步是要加上ext-basex.js的。&
解决办法:&
修改 ext - basex-debug .js 文件中的一条语句:&
将以下代码:
if(callback && callback.timeout){
if(callback && callback.timeout && options.async){
正如大家看到的一样,添加了“&& options.async”。&
改完上面的地方就可以了。&
如果你不是使用的debug版,使用的是压缩的版本,那么在 ext - basex .js中查找“if(u&&u.timeout){”(注意不含引号),找到后修改为“if(u&&u.timeout&&n.async){”,当然,你可以直接替换。&
将“if(u&&u.timeout){”改为“if(u&&u.timeout&&n.async){”。&
注意:测试的时候一定要先清理一下缓存,我试的时候一直没有效果,后来发现是缓存原因。&
怎样清理浏览器缓存[各种浏览器]&&&&&&&&
也有人说改另一个地方,不过我没有试,上面是我试了没有问题的。&
in ext-basex.js 4.1 about line 1011&
('timeout' in r) && (r.timeout = callback.timeout);&
modified to :&
(options.async) && ('timeout' in r) && (r.timeout = callback.timeout);
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:66240次
积分:1154
积分:1154
排名:第16969名
原创:42篇
转载:38篇
(2)(1)(1)(1)(1)(4)(3)(3)(2)(1)(3)(1)(2)(2)(1)(5)(2)(4)(5)(6)(1)(1)(1)(2)(2)(3)(1)(1)(1)(1)(3)(3)(1)(2)(2)(2)(3)(2)

我要回帖

更多关于 jquery ajax异步请求 的文章

 

随机推荐