为什么ajax异步提交时,请求总是系统处于挂起状态态

2017年8月 总版技术专家分月排行榜第一
2016年2月 总版技术专家分月排行榜第二2014年2月 总版技术专家分月排行榜第二2013年4月 总版技术专家分月排行榜第二
2012年12月 Web 开发大版内专家分月排行榜第三
2011年3月 Web 开发大版内专家分月排行榜第二2011年1月 Web 开发大版内专家分月排行榜第二2010年10月 Web 开发大版内专家分月排行榜第二2010年9月 Web 开发大版内专家分月排行榜第二2010年6月 Web 开发大版内专家分月排行榜第二
2012年10月 Web 开发大版内专家分月排行榜第三2010年7月 Web 开发大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。问题原因:1. ajax时return false 的function与onsubmit()不是同一个函数;2. 在ajax执行时,async默认的设置值为true,这种情况为异步方式,就是说当ajax发送请求后,在等待server端返回的这个过程中,前台会继续 执行ajax块后面的脚本,直到server端返回正确的结果才会去执行success,也就是说这时候执行的是两个线程,ajax块发出请求后一个线程 和ajax块后面的脚本(另一个线程)。原因:逻辑没弄清楚,要将ajax设置为同步的,需要使用$.ajax,$.get默认是异步的,并且不是在回调函数内return,而是在CheckUserName函数中声明一个变量来接受回调函数的返回值,然后CheckUserName返回这个值。
$.ajax({& & async:false,
////要设置为同步的,要不CheckUserName的返回值永远为false& & url: "${ctx}/register/registeremail.do",& & type: "Post",& & data: {"email" : email},& & success: function(transport){& & & & & & & & & &if(transport==0){& & & & & & & & & & & & && & & & & & & & & & & & &document.getElementById("em").style.display="inline";& & & & & & & & & & & & &html="&font color=010203&恭喜您,该邮箱可以注册!&/font&";& & & & & & & & & & & & &$("#em").html(html);& & & & & & & & & & & & &clearError(frm["email"]);& & & & & & & & & & & & myflag=& & & & & & & & &}else{& & & & & & & & & & & &addErrors(frm["email"],"对不起!该邮箱已经注册!");& & & & & & & & & & & &document.getElementById("em").style.display="none";& & & & & & & & & & & flag=& & & & & & & & & }& & & & &}
alert(flag + "...邮箱...");&if(flag){& & & &&}
& & & & & &
阅读(...) 评论()页面中的按钮的type是submit的: &input type="submit" value="Create" id="submit" /&ajax的请求,在JQuery中是:&&&&$(function&()&{&&&&&&&&$('#submit').click(function&()&{&&&&&&&&&&&&var&createGenreForm&=&$('#createGenreForm');&&&&&&&&&&&&if&(createGenreForm.valid())&{&&&&&&&&&&&&&&&&var&obj&=&{&&&&&&&&&&&&&&&&&&&&Name:&$('#Name').val(),&&&&&&&&&&&&&&&&&&&&Description:&$('#Description').val()&&&&&&&&&&&&&&&&};&&&&&&&&&&&&&&&&var&jsonSerialized&=&JSON.stringify(obj);&&&&&&&&&&&&&&&&$.ajax({&&&&&&&&&&&&&&&&&&&&type:&"POST",&&&&&&&&&&&&&&&&&&&&url:&createGenreForm.attr('action'),&&&&&&&&&&&&&&&&&&&&dataType:&"json",&&&&&&&&&&&&&&&&&&&&contentType:&"application/&charset=utf-8",&&&&&&&&&&&&&&&&&&&&data:&jsonSerialized,&&&&&&&&&&&&&&&&&&&&success:&function&(result)&{&&&&&&&&&&&&&&&&&&&&&&&&alert(result.Message);&&&&&&&&&&&&&&&&&&&&},&&&&&&&&&&&&&&&&&&&&error:&function&(error)&{&&&&&&&&&&&&&&&&&&&&&&&&alert("There&was&an&error&posting&the&data&to&the&server:&"&+&error.responseText);&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&});&&&&&&&&&&&&}&&&&&&&&});&&&&});&发生两次提交的原因是在执行完ajax请求后,并没有阻止submit的行为,所以解决方法有两种:1、不使用type为submit类型的按钮,而是使用type是button的按钮。2、在$('#submit').click函数中,最后加一行,即可阻止submit。
阅读(...) 评论()在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
我想实现“加载更多”分页,页面初始化的时候正常列出后台返回的数据,当我点击“加载更多”时,在后台打断点,当前页正常变化,返回的数据也正确,可是这时页面上显示的还是页面初始化加载的数据,当我再点击“加载更多”时,页面显示还是上一次也就是页面初始化的数据。
前端部分代码如下:
function cases(){
if(caseFlag){
url:"/edc/personalspace/myCases",
type: "post",
dataType: "json",
"pageSize":pageSize,
"pageNo": currentPageNo
cache: false,
success: function(data){
var comContainer = $("#moreCase");
var componentC
componentCate = data.rows.
这是结果,求提示
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
是后台数据问题
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
传入的pageNo有变化没有
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:jquery ajax请求方式与提示用户正在处理请稍等
投稿:whsnow
字体:[ ] 类型:转载 时间:
为了提高用户体验度,我们通常会给出 “正在处理,请稍等!”诸如此类的提示。我们可通过设置$.ajax()下的参数beforeSend()来实现
初次使用$.ajax() ,我没有去区分过ajax的异步请求和同步请求的不同,刚开始使用同步请求,以至后来出现许多问题,特别在体验度方面。
异步和同步:
同步意味着执行完一段程序才能执行下一段,它属于阻塞模式,其表现在网页上的现象是——浏览器会锁定页面(即所谓的页面假死状态),用户不能操作其它的,必须等待当前请求返回数据。而使用异步方式请求,页面不会出现假死现象。
提升用户体验度:
当用户提交数据等待页面返回结果是需要时间的,有时这段等待时间比较长,为了提高用户体验度,我们通常会给出 “正在处理,请稍等!”诸如此类的提示。我们可通过设置$.ajax()下的参数beforeSend()来实现,
html关键代码
&div id="warning"&&/div&
js文件中的关键代码
$.ajax(function(){
//省略了一些参数,这里只给出async 和 beforeSend
async: false, //同步请求,默认情况下是异步(true)
beforeSend: function(){
$('#warning').text('正在处理,请稍等!');
注意,如果你按照同步设置 async: false, $('#warning').text('正在处理,请稍等!');在网页中根本没有出现效果,如果将$('#warning').text('正在处理,请稍等!');换成 alert(‘test');在发送请求前会立即看到弹出框,这说明 beforeSend:是执行了,但是换成别的诸如 $('#warning').text('正在处理,请稍等!'); 在请求发出返回结果了都没有看到提示出现。关于这个问题,我是纳闷了很久,问题到底是什么我还是不清楚。
把同步请求改成异步请求,上面的问题就没有了,
beforeSend: function(){
$('#warning').text('正在处理,请稍等!');
会立即被执行。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具}

我要回帖

更多关于 重新启动处于挂起状态 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信