蒙恬乃使蒙括北筑长城而守藩篱的目的是什么

Ajax,怎么防止,重复请求?
这个Ajax,是在&a href=&get_json.php&&链接&/a&,这里建立,请求的,单击没bug,双击或者拼命点击(点击频率过快)这个a标签就会有BUG,网上找了,setTimeout,这个方法也没效果!求指导!
点一下,把a标签替换掉,返回结果,再把a标签弄回来
--- 共有 1 条评论 ---
好的,谢谢!试试看,应该可以
ajax abort
定义一个变量
点击后 a=1,返回结果后再 a=0
点击时判断 a==0 时才请求
高并发都不好使
为啥不从业务方面想想,这个链接是否有必点的需求,从你的URL名称看的话就是获取一段JSON这个功能是否需要由人工的来点击触发我觉的可以考虑一下,有时候其实可以是使用业务来弥补技术的!
--- 共有 1 条评论 ---
业务上已经存在了,改不动了
这个很容易吧,启动session,&设置标志,如果标志存在 那么立刻退出。
如果是一次性的任务,那么设置cookie.检测到cookie立刻退出
引用来自“你要爪子”的答案点一下,把a标签替换掉,返回结果,再把a标签弄回来常用的做法是点了之后换成一张表示loading中的gif图片
这个异步处理不好使,你又要求一个结果同步的啊
点击=》改变a=》ajax成功=&改回来前端代码是当输入密码个数为6个的时候,触发ajax请求,但输入很快的时候会触发多个请求,为了防止重复发送请求。
可以利用jquery ajaxPrefilterzhong中断请求
局限性:仅仅对jquery 发送的ajax请求有作用
调用abort后jquery会执行error的方法,抛出abort的异常信息。可以使用以下方式区分出该类型的异常。
error:function(jqXHR, textStatus, errorThrown){
if(errorThrown != 'abort'){
//ajax被调用abort后执行的方法
alert('应用加载失败!');
var pendingRequests = {};jQuery.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
var key = options.
if (!pendingRequests[key]) {
pendingRequests[key] = jqXHR;
jqXHR.abort(); //放弃后触发的提交
//pendingRequests[key].abort(); // 放弃先触发的提交
var complete =
plete = function(jqXHR, textStatus) {
pendingRequests[key] =
if (jQuery.isFunction(complete)) {
complete.apply(this, arguments);
type:"post",
data:{"act":"checkpwd","password":pwd},
dataType:"json",
success:function(request){
if(request.statu == 0){
Air_View("支付密码错误");
$("#walletpay").submit();
error:function(jqXHR, textStatus, errorThrown){
if(errorThrown != 'abort'){
//ajax被调用abort后执行的方法
alert('应用加载失败!');
阅读(...) 评论()循环多次用ajax发送请求解决
功能描述:在一级分类下拉框下选择某项目,其对应的信息:质地,默色,形制等信息分别都列入到质地下拉框,默色下拉框,形制下拉框。具体代码如下://上面看不懂不要紧,问题在下面的循环,如果只写一个if条件没有问题,如果是两个if或者是三个,那么只会将最后一个下拉列表框载入数据。但是如果将下注释的//alert(i+& 质地&+url1);一起执行,则全都可以载入。
for(i=0;i&i++){
if(fieldName[i]==&质地&){
createXMLHttpRequest();  //创建一个XMLHttpRequest对象
url1=&inityspInfo.jsp?sign=ysplm&idc=&+fieldId[i]+&&&+Math.random();
XMLHttpReq.open(&GET&,url1,true);
XMLHttpReq.onreadystatechange=function (){
if (XMLHttpReq.readyState == 4&&XMLHttpReq.status == 200) {
AddCombo(&TEXTURE&,&recordnum&,&ID&,&NAME&); //该方法是将内空加入到下拉列表框中,以下代码同理
XMLHttpReq.send(null);
//alert(i+& 质地&+url1);
if(fieldName[i]==&默色&){
createXMLHttpRequest();
url2=&inityspInfo.jsp?sign=ysplm&idc=&+fieldId[i]+&&&+Math.random();
XMLHttpReq.open(&GET&,url2,true);
XMLHttpReq.onreadystatechange=function (){
if (XMLHttpReq.readyState == 4&&XMLHttpReq.status == 200){
AddCombo(&INKCOR&,&recordnum&,&ID&,&NAMEVAL&);
XMLHttpReq.send(null);
//alert(i+&默色 &+url2);
                                                                           };
                                                          XMLHttpReq.send(null);                                                                }相信大家也应该碰到类似的问题,没有可行的方法解决。不要用ajax池的方法。
09-09-16 &
Ajax基本原理摘要:本文介绍了Ajax的基本原理,交互过程和与之相关的技术及简单的实现方法,在此基础上给出了一个完整的实例,以使得能够对Ajax有一个更清楚的理解。关键字:Ajax,JavaScript,DOM,无刷新页面,不完全刷新引言计算机桌面应用使我们得以用以前不能想象的方式处理大量的复杂数据;基于计算机网络的C/S模式应用使得共享数据和资源成为现实。然而,正如C/S模式的应用是由于人们不满足单机的桌面应用一样,人们对C/S模式也心存抱怨了:C/S模式除了带给我们数据和资源共享的便利之外,也给我们带来了令我们(程序开发设计人员)和客户头疼的部署和发布问题。于是,B/S模式应用应运而生,而且得到了迅速的发展。B/S模式应用符合一定规范的浏览器作为通用客户端,从而解决了C/S模式中最令人头疼的部署和发布问题。但是,到此并没有结束,B/S虽然解决了应用的部署和发布问题,却因为种种限制,使得应用没有了以前丰富的交互,并且每次与服务器的交互都要完全刷新页面,这是非常糟糕和令人不快的。本文讨论了如何解决页面完全刷新和缺乏交互性的问题,我们用的方法就是――Ajax。Ajax      那么,Ajax到底是什么呢?Ajax(Asynchronous JavaScript + XML),即异步JavaScript + XML的缩写,这只是最初的观点,最初由Jesse James Garrett创造出来的。但是,Ajax现在的覆盖面已经有了进一步的扩展,把允许浏览器与服务器通信而无需刷新当前页面的技术都涵盖在其中了。      坦率的讲,Ajax并不是什么新鲜玩艺。也就是说,Ajax并不是一种全新的技术,而更像一种技巧,是把过去的几种技术巧妙结合的技巧。真正与Ajax相关的新名词应该是XMLHttpRequest――一个最早在IE 5中出现,最近开始在多数浏览器得到支持的用来实现异步通信的对象。正如前面所说,B/S模式是利用浏览器作为其通用的客户端,所以要想异步通讯成为可能,必须要得到浏览器的支持。如果不是有了浏览器对XMLHttpRequest对象的广泛支持,我们可能不会看到Ajax的今天,更不会看到许多对Ajax的著名应用,如Google Map,Google Suggest,Ta-da List等。      Ajax的处理过程是怎样的呢?下图为Ajax应用的标准处理模式。图 1 标准Ajax处理过程从图中我们可以看出:由事件触发,创建一个XMLHttpRequest对象,把HTTP方法(Get/Post)和目标URL以及请求返回后的回调函数设置到XMLHttpRequest对象,通过XMLHttpRequest向服务器发送请求,请求发送后继续响应用户的界面交互,只有等到请求真正从服务器返回的时候才调用callback()函数,对响应数据进行处理。在这个交互过程中,涉及到几种我们不得不提的技术:1. XHTML和CSS――用来使表现标准化;2.DOM――动态的修改文档的内容和结构;3.XML――进行数据的交换和处理;4.JavaScript――对上述几种技术进行绑定,使其成为协同工作的整体。Ajax相关技术及基本原理1. XMLHttpRequest简介XMLHttpRequest,是我们得以实现异步通讯的根本。最早在IE 5 中以ActiveX组件实现;最近,Mozilla 1.0和Safari 1.2中实现为本地对象。XMLHttpRequest虽然不是W3C标准,但却得到了FireFox、Safari、Opera、Konqueror、IE等绝大多数浏览器的支持。这就使得Ajax有了今天如火如荼的发展。用XMLHttpRequest进行异步通讯,首先必须用JavaScript创建一个XMLHttpRequest对象实例。创建XMLHttpRequest对象实例的代码清单如下所示:var xmlHfunction createXMLHttpRequest(){   if(window.ActiveXObject){       xmlHttp = new ActiveXObject(&Microsoft.XMLHTTP&);   }   else if(window.XMLHttpRequest){       xmlHttp = new XMLHttpRequest();   }}可以看出,创建XMLHttpRequest对象相当容易。首先,声明一个全局变量xmlHttp用来保存即将创建的XMLHttpRequest对象的引用;然后,在createXMLHttpRequest()方法中完成具体创建工作。因为IE与其他浏览器对XMLHttpRequest 对象的实现方法不同,因此在创建时,通过一个分支语句进行判断。如果window.ActiveXObject调用返回true,则证明为IE浏览器,那么就通过传递“Microsoft.XMLHTTP”给ActiveXObject()来创建XMLHttpRequest对象,否则就把XMLHttpRequest实现为本地JavaScript对象。XMLHttpRequest对象在不同浏览器上的实现是兼容的,所以可以用同样的方法访问XMLHttpRequest的方法和属性。表 1  标准XMLHttpRequest方法方      法说      明abort()getAllResponseHeader()getResponseHeader(&Header&)open(&method&, &url&)send(content)setRequestHeader(&header&, &value&)
请登录后再发表评论!防止重复发送 Ajax 请求的解决方案 - 推酷
防止重复发送 Ajax 请求的解决方案
在页面中有多个按钮,点击该按钮可以异步的去服务端读取数据,然后在前端将数据展示出来。
每个按钮点击请求的页面都是同一个,但是请求的参数不同,所以返回的内容就不同。
在连续点击多个按钮的时候就会发出多个异步请求。那么根据请求返回的快慢(因为不同按钮参数不同,返回内容不同,所以会有快慢之分),数据会依次的展示出来,那么就会出现一个先点击的按钮,由于他请求的数据量比较大,导致数据被后显示出来。
解决这种问题有两种方式:
1.当连续进行多个请求,并且请求的url地址相同时。放弃前面的所有请求,只执行最后一次请求。
2.当连续进行多个请求,并且请求的url地址相同时。放弃后面的所有请求,只执行第一次请求。
一、将ajax请求的async设置为false
async: false,
type : &POST&,
url : defaultPostData.url,
dataType : 'json',
success : function(data) {
类型:Boolean
默认值: true。默认设置下,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为 false。
注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。
二、利用jquery ajaxPrefilter中断请求
由于第一种方案只是一种曲线救国的方式,其实没能真正的解决上面的问题。所以,建议使用这种方式。
var pendingRequests = {};
$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
var key = options.
console.log(key);
if (!pendingRequests[key]) {
pendingRequests[key] = jqXHR;
//jqXHR.abort();
//放弃后触发的提交
pendingRequests[key].abort();
// 放弃先触发的提交
var complete =
plete = function(jqXHR, textStatus) {
pendingRequests[key] =
if ($.isFunction(complete)) {
complete.apply(this, arguments);
Prefilters是一个预过滤器,在每个请求之前被发送和
处理它们前处理。
options 是请求的选项
originalOptions 值作为提供给Ajax方法未经修改的选项,因此,没有ajaxSettings设置中的默认值
jqXHR 是请求的jqXHR对象
以上内容的核心思想是维护一个队列,发送请求时,将请求加入队列,请求响应后,从队列中清除,这就保证了在任一时刻只能有一个同样的请求发送.
局限性:仅仅是前台防止jquery的ajax请求。对于非jquery的ajax请求,不起作用。因为使用的是jquery的ajaxPreFilter函数,仅仅对jquery的ajax请求有作用。
调用abort后jquery会执行error的方法,抛出abort的异常信息。可以使用以下方式区分出该类型的异常。
var ajax = $.ajax({
'error':function(jqXHR, textStatus, errorThrown){
if(errorThrown != 'abort'){
//ajax被调用abort后执行的方法
alert('您的ajax方法被停止了');
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致

我要回帖

更多关于 北筑长城 的文章

 

随机推荐