PHP怎么让一个请求等待实审请求另一个请求的完成

最近做项目的时候遇到个问题,就是做阿里云oss大文件上传进度条显示,因为要实时查询上传分片进度,所以在上传的同时必须要再发起查询的请求,但是一直都是所有分片上传完成后查询的请求才执行,刚开始以为是阿里的接口的问题(好丢人,差点提交工单了),最后尝试着百度了一下,原来是由于PHP的Session信息是写入文件的,1个客户端占有1个session文件。因此,当 session_start被调用的时候,该文件是被锁住的,而且是以读写模式锁住的(因为程序中可能要修改session的值),这样,第2次调用 session_start的时候就被阻塞了。因此,我们可以在用完session之后,调用这个函数关闭session 文件即可解除锁定。一般,session是用来记录用户身份信息的,以便PHP进行身份认证,因此完全可以将session的读写放在页面刚开始执行的时 候,在执行完以后,马上调用session_write_close函数即可。完美解决。
阅读(...) 评论()在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
仿的是花瓣登录效果,他默认HTML是这样的
&a onclick="app.showSheet('login', {modal: true});" href="#" class="login btn wbtn"&&span class="text"& 登录&/span&&/a&
点击登录,会在#page里面加上登录框,
&div class="sheet-overlay" style="opacity: 1;"&&/div&
&div id="sheet" class="destroy" style="display: top: 72"&
&div id="sheet_login" class="sheet"&
&div class="head"&
&h2&登录花瓣&/h2&
&div class="body"&
&div class="login-connect"&
&h5&使用合作网站帐号登录&/h5&
&div class="connections clearfix"&&a href="/oauth/weibo/instant_login/" onClick="" class="weibo login-button"&新浪微博&/a&&a href="/oauth/douban/instant_login/" onClick="" class="douban login-button"&豆瓣&/a&&a href="/oauth/renren/instant_login/" onClick="" class="renren login-button"&人人网&/a&&a href="/oauth/qzone/instant_login/" onClick="" class="qzone login-button"&QQ&/a&&/div&
&p class="less"&未注册过花瓣也可以直接登录哦&/p&
&div class="login-form"&
&h5&使用注册邮箱登录&/h5&
&form id="auth_form" action="/auth/" method="post" class="Form FancyForm AuthForm"&
&div class="input email"&
&input id="login_email" name="email" type="text" value=""&
&label&花瓣注册邮箱&/label&
&span class="fff"&&/span&&/div&
&div class="input password"&
&input id="login_password" name="password" type="password"&
&label&密码&/label&
&span class="fff"&&/span&&/div&
&div class="non_inputs"&&a id="login_btn" href="#" onClick="" class="btn btn18 rbtn"&&strong& 登录&/strong&&span&&/span&&/a&&a id="reset_password" href="#" onClick="" class="less fr"&忘记了密码?&/a&&a id="back_to_login" href="#" style="display:" onClick="" class="less fr"&哦,又想起来了!&/a&&/div&
&div id="reset_msg" style="display:" class="success"&&/div&
&div class="clear"&&/div&
&a href="#" title="关闭" onClick="app.hideSheet();" class="close"&&/a&&/div&
点击关闭后,会删除这个登录框。而且出来的时候是向下拉,关闭的时候是向上收,我把上面代码放在/include/pop-login.php里面
onclick="app.showSheet('login', {modal: true});"
他这样的方式怎么写
$('.login').on('click',function(){
async: false,
url: "/include/pop-login.php",
cache: false,
success: function(html){
$("#page").append(html);
$('#sheet_login .close').live('click',function(){
$('.sheet-overlay').remove();
$('#sheet').remove();
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
大概这种感觉?
function on_click_login(){
async: false,
url: "/include/pop-login.php",
cache: false,
success: function(html){
$("#page").append(html);
error: function(){
$('.login').one('click',on_click_login);
$('.login').one('click',on_click_login);
$('#page').on('click','#sheet_login .close',function(){
$('.sheet-overlay').remove();
$('#sheet').remove();
$('.login').one('click',on_click_login);
PS,因为不喜欢live所以随手改掉了……
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
也碰到过楼主的这样的问题,那个时候也没有什么好方法解决。当时用了一个很丑陋的方法解决掉的。
当时在页面上写了一个隐藏变量,每次ajax触发之前,都清零,ajax执行成功之后,延迟100ms,才给他赋值,然后每次按键的时候,都预先判断这个隐藏变量是否有值。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
var popLogin = {
isLock: false,
init: function() {
if (popLogin.isLock) {
url: "/include/pop-login.php",
cache: false,
success: function(html){
$("#page").append(html);
complete: function() {
popLogin.isLock =
$('.login').on('click', popLogin.init());
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
难道不是在click时disable掉按钮,然后在ajax结束的时候enable吗……
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:求php大神们帮帮忙,页面提交数据处理友好提示等待再显示处理完的数据_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
求php大神们帮帮忙,页面提交数据处理友好提示等待再显示处理完的数据
现在我要1.php的数据提交到2.php处理,因为数据复杂,所以要几秒钟才可以处理完。这时提交后网速就像网速很慢似的停留在1.php页面,感觉不怎么好。所以我想提交数据时可以弹窗提示书数据正在处理,请耐心等待下,等2.php把数据处理完就立即显示2.php。或是立即...
我有更好的答案
当你提交的时候js会运行,展示你的正在加载的提示。但是呢因为访问缓慢并没有跳转,别用alert,伪装一个就好了其实有个很简单的解决方法,然后让你的正在加载的样式展示出来。原理也很简单。就是提交的时候给一个提示就好了。给 form 一个 onsubmit
就像百度这里一样,我提交追问时会提示正在提交追问,请耐心等待,这样的怎么做?给个例子吧感激不尽
想要做一个良好的ui那么就需要一个良好的js,html还有css的基础。我就简单的给一个例子吧。效果也很简单。想要更好的效果,需要学习下css和js的知识了。&!--1.php--&&form&action=&2.php&&method=&post&&onsubmit=&tip()&& &input&type=&text&&name=&name&&/&&br&/& &input&id=&sub&&type=&submit&&value=&提交姓名&&/&&/form&&script&function&tip(){ //&这里写效果就行了 //&我这里就写一个提交按钮变字的效果 document.getElementById('sub').value=&正在提交……&;}&/script&//&2.php&?phpsleep(2);//&模拟延迟var_dump($_POST);?&
采纳率:63%
请使用ajax。。。。。
不会用ajax,给个实例可以不?
为您推荐:
其他类似问题
php的相关知识
等待您来回答主题 : 如何使多个请求都完成后再执行某个方法
级别: 精灵王
发帖: 1300
可可豆: 3259 CB
威望: 3303 点
在线时间: 1489(时)
发自: Web Page
如何使多个请求都完成后再执行某个方法&&&
同时发出多个请求,以block方式返回,如何在每个都返回后再执行另一个方法呢?&&&&&&&&&&&&
级别: 版主
可可豆: 2200 CB
威望: 26364 点
在线时间: 5914(时)
发自: Web Page
弄一个成员变量
发送的时候+1,回调的时候-1
发现是0的时候执行函数
级别: 新手上路
可可豆: 45 CB
威望: 65 点
在线时间: 258(时)
发自: Web Page
第一个请求完成不是有个block吗& 在这个block里面写第二请求 一次类推
&
级别: 精灵王
发帖: 1300
可可豆: 3259 CB
威望: 3303 点
在线时间: 1489(时)
发自: Web Page
我说错了,现在是两个以block返回,一个以代理返回,就是location那个,如果用这种方法,万一第一个请求在某种情况下执行两次就不准了。。
级别: 版主
可可豆: 2200 CB
威望: 26364 点
在线时间: 5914(时)
发自: Web Page
执行两次就应该有两个回复
级别: 精灵王
发帖: 1300
可可豆: 3259 CB
威望: 3303 点
在线时间: 1489(时)
发自: Web Page
location的代理方法是不是有可能会执行多次?比如位置变了
级别: 精灵王
发帖: 1300
可可豆: 3259 CB
威望: 3303 点
在线时间: 1489(时)
发自: Web Page
如果是并行,是否有好方法呢?
级别: 版主
可可豆: 2200 CB
威望: 26364 点
在线时间: 5914(时)
发自: Web Page
http请求的话是一对一的吧
级别: 新手上路
可可豆: 164 CB
威望: 173 点
在线时间: 585(时)
发自: Web Page
dispatch_group_notify
dispatch group 可以在group中的dispatch queue都执行完之后,通过一个dispatch_group_notify通知回调。
1
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
3
dispatch_group_t group = dispatch_group_create();
5
dispatch_group_async(group, queue, ^{NSLog(@&task1&);});
6
dispatch_group_async(group, queue, ^{NSLog(@&task2&);});
7
dispatch_group_async(group, queue, ^{NSLog(@&task3&);});
9
dispatch_group_notify(group, dispatch_get_main_queue(), ^{NSLog(@&finished...&);});
输出总会保证&finished...&会在最后一句输出
级别: 精灵王
发帖: 1300
可可豆: 3259 CB
威望: 3303 点
在线时间: 1489(时)
发自: Web Page
location的不是只要没stop就一直监听么?这样代理方法会走多次吧?前一句我不确定。。
关注本帖(如果有新回复会站内信通知您)
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 关注CVP公众号
扫一扫 浏览移动版说起很简单,其实就是希望首先echo给用户操作正确的提示,然后再运行发送邮件的程序(需要2到3秒),怎么实现呢?
该问题被发起重新开启投票
投票剩余时间:
之前被关闭原因:
该问题被发起删除投票
投票剩余时间:
距离悬赏到期还有:
参与关闭投票者:
关闭原因:
该问题已经被锁定
锁定原因:()
保护原因:避免来自新用户不合宜或无意义的致谢、跟帖答案。
该问题已成功删除,仅对您可见,其他人不能够查看。
可以考虑fastcgi_finish_request(), 当然只有php-fpm下有效.可以在脚本output之后继续工作, 当然, 时间最好不要太久......补充说明, fastcgi_finish_request()之后和客户端的连接实际已经断开, 所以之后不会有任何输出.
"操作正确&br /&";//暂停 2 秒sleep(2);//发送邮件......
我想到一个笨办法,就是在请求后跳转到a.php,里面echo '操作正确', 并且设置请求头跳转到b.php,然后在b.php处理发送邮件,这样用户首先会看到a.php的提示,同时会继续请求b.php,应该满足了你的要求了
如果一定要保证收到邮件,用队列是正解先发邮件,再显示信息
不是您所需,查看更多相关问题与答案
德问是一个专业的编程问答社区,请
后再提交答案
关注该问题的人
共被浏览 (2677) 次

我要回帖

更多关于 ajax请求等待效果 的文章

 

随机推荐