精华内容
下载资源
问答
  • ajax请求时间过长页面等待提示框

    千次阅读 2014-08-08 17:48:06
    $.ajax({ type:"POST", url:'<c:url value="/deptMeasuregx/update"/>', data:"param="+encodeURIComponent(encodeURIComponent(JSON.stringify(param))), success:function(){ $("#dialog_...

    效果如下图:

    页面

                                    <!--内容部分-->
    				<div id="dialog_message">
    					  <p>
    					    <span class="ui-icon-yan ui-icon-alert-yan" style="float:left; margin:0 7px 20px 0;"></span>
    					       数据正在处理中,请耐心等待
    					  </p>
    				 </div>
    .ui-icon-yan { width: 16px; height: 16px; background-image: url(../images/ui-icons_469bdd_256x240.png); }
    .ui-icon-alert-yan { background-position: 0 -144px; }

    <script type="text/javascript">
    	$("#dialog_message").dialog({
    	    resizable: true,
    	    autoOpen:false,
    	    modal: true
    	 });
    	/*
    		type为保存类型,
    	*/
    	function save(type) {
    		
    		//form = button.form;
    
    		form = $('#deptMeasureForm')[0];
    		
    		if (!biz.validate("valid", form)) {
    			showWarn("<fmt:message key='validation.object'/>", 3000);
    			return;
    		}
    
    		var $table =  $("#timeDecTableInfo tbody") ;
    		var $tr = $table.find('tr') ;
    		var rowCount = $tr.length;
    		var rows = [] ;
    		
    		//判断下面表格是否有内容,如果没有不能保存
    		if(rowCount == 0 ){
    			showWarn("该月没有数据!", 2000);
    			return ;
    		}
    
    
    		var flag = true ;
    		//检查目标分解中的内容是否填写完整
    		$tr.find("[name=ggtPlanValues],[name=ggtOver]").each(function(){
    				if($(this).val() == ""){
    					showWarn("请将测量信息填写完整!", 2000);
    					flag = false;
    					return false ;
    				}
    		});
    		//验证不通过
    		if(!flag){
    			return ;
    		}
    		 $("#dialog_message").dialog("open");
    		for(var i = 0 ; i < rowCount ; i++){
    			var $temp = $tr.eq(i);
    			var obj = {
    				ggtPlanValues : $temp.find('[name=ggtPlanValues]').val(),
    				ggtId : $temp.find('[name=ggtId]').val(),
    				ggiId : $temp.find('[name=ggiId]').val(),
    				ggtOver : $temp.find('[name=ggtOver]').val(),
    				ggtRemark : $temp.find('[name=ggtRemark]').val()
    			}
    			rows.push(obj);
    		}
    
    
    		var ggttId = $("#ggttId").val();
    		var param = {
    			ggttTaskName:$('#ggttTaskName').val(),
    			ggttRemark:$('#ggttRemark').val(),
    			ggttId:$("#ggttId").val(),
    			timeDecInfo:rows
    		};
    		
    		$.ajax({
    			type:"POST",
    			url:'<c:url value="/deptMeasuregx/update"/>',
    			data:"param="+encodeURIComponent(encodeURIComponent(JSON.stringify(param))),
    			success:function(){
    				$("#dialog_message").dialog("close");
    				if(type == 1){
    					showInfo("保存成功!", 2000);
    				}
    			}
    		});
    		
    		return true ;
    	}
    <pre name="code" class="html"><script/>

    
    




    展开全文
  • 有时我们会注意到,当一个网页发送两个或者更多Ajax请求时,PHP的反应时间会很并会同时返回响应内容。这个问题很可能是你处理PHP会话的方式造成的,跟着本文去理解这个问题,并做一些处理来避免这个问题。内容什么...

    现在我们开发了很多依赖于Ajax请求的应用,在某些情况下,甚至全部页面都依赖Ajax。有时我们会注意到,当一个网页发送两个或者更多Ajax请求时,PHP的反应时间会很长并会同时返回响应内容。

    这个问题很可能是你处理PHP会话的方式造成的,跟着本文去理解这个问题,并做一些处理来避免这个问题。

    内容

    什么是PHP会话?
    什么是Ajax?
    具体问题
    造成的原因
    问题的解决方法
    总结

    PHP Ajax

    什么是PHP会话?

    为了理解这个问题,有必要先了解一下PHP会话和Ajax,以及它们是怎么干扰的。
    假设你正在开发一个Web应用,想要识别不同用户。你想要记住是谁每次浏览了所有页面但都没有登录,这种情况下,你可以使用cookies或sessions。
    可以你已经意识到了,sessions是一种存储用户信息的方式,它可以在任何页面重新取回用户信息。跟Cookies不同,Sessions是存储在服务器上的,所有用户不能直接改变这些信息。
    默认情况下,Sessions在用户关闭浏览器之前均有效,或者用户在PHP配置文件中指定的时间内没有活动之后才失效。
    在PHP页面中,无论你什么时候想要存储或者重新获取用户数据,都必须在页面开始处调用session_start(),因此才有权限使用$_SESSION去获取session数据。

    什么是Ajax?

    Ajax代表 Asynchronous JavaScript and XML,它是一种不用重新加载整个页面就能向服务器发送数据和从服务器接收数据的方式。
    我们使用这种方式来发送数据,并以较快的速度从服务器检索数据。我们不用得到整个页面并在浏览器中渲染它,因为这是很慢的。
    因此,我们可以更新网页的一部分,并且用户是可以看见这种改变的,就像用户向下滚动Facebook的时间线页面来看他们想看的东西,随着新内容添加而不用重载整个页面。

    具体问题

    开发几乎100%基于Ajax的Web应用已经不是一件新鲜事了,但是当一个网页同时发送两个及以上的Ajax请求时,你会注意到请求会花费很长时间,并且几乎在同一时刻完成了请求。

    造成的原因

    当你想服务器发送一个Ajax请求时,PHP脚本也开启了session_start(),它的调用会锁定PHP的session文件。
    你可能已经知道,PHP默认会把session数据存储在服务器上的文件中。因为仅仅只有一个PHP请求能改变同一个session文件,两个同时的PHP请求可能会造成典型的文件锁条件,因此,任何一个其他由PHP调用的对于同一个用户的session_start()请求将不得不等到第一个请求结束。
    现在,大部分PHP框架会首先在主文件中使用session_start()。因此,如果你正在使用会调用session_start()的框架或者函数库,将会造成session文件锁,对于使用同一个浏览器的相同用户,这将延迟同时发送的Ajax请求。

    问题的解决方法

    调用session_write_close()函数会使PHP写入session文件并关闭它,因此释放session文件后,另一个请求就有权限写入。
    调用session_write_close()之后,当前脚本会继续正常运行,但你应该清楚在调用session_write_close()之后不允许改变任何session变量;在同一个脚本中,其它同时发送给PHP的请求可以锁定session文件并改变session变量。
    为了让你看到这种问题,我创建了测试代码并将它上传到了github。你可以再这里找到测试脚本。在本地,你需要用一个实例来使用测试代码,然后打开浏览器控制台,查看请求和响应时间。
    正如我们在这个文件中看到的示例代码,如果我们像下面代码这样,创建多个请求…

    session_start();
    sleep(5);

    同一个用户的每个请求完成之前都将等到前一个请求完成。它将用时5s,因为知道脚本完成之前,session文件都没有被释放。因此,当第一次调用session_start()时,新的请求将被阻塞。那将杀死异步请求的想法,也就是说,多个请求会在同一时间被发送和被执行。
    如果将文件中的代码改一下:

    session_start();
    // do something useful here
    session_write_close();
    sleep(5);

    第三行代码将释放session文件锁,所以另一个并发请求不需要等待就能运行,因为它可以调用session_start()而不会有任何问题。

    总结

    PHP有些微妙,会让你担心为什么奇怪的事情会发生。但是一旦你理解事情是怎么运行的,一切将变得有意义,并且你能更好的思考去解决问题。

    译文出处:http://www.ido321.com/1577.html

    本文根据@Eslam Mahmoud的《Fix the AJAX Requests that Make PHP Take Too Long to Respond》所译,整个译文带有我自己的理解与思想,如果译得不好或有不对之处还请同行朋友指点。如需转载此译文,需注明英文出处:http://www.phpclasses.org/blog/post/277-Fix-the-AJAX-Requests-that-Make-PHP-Take-Too-Long-to-Respond.html

    展开全文
  • 由于后台运算会花费较长时间(大概4、5分钟),这个时间一旦较,再返回Json给页面时页面就没反应了。 `` $.ajaxFileUpload({ url : $(this).attr("action"), secureuri : false, formObj : $(this), ...
  • <div id='progressBarDown' style="display: none" class='progressBar'>数据加载中,请稍等...<...$.ajax({ type: "post", dataType:"json", data:{ "abc":"abd" }, url:"/abc/dbc.a...
    <div id='progressBarDown' style="display: none" class='progressBar'>数据加载中,请稍等...</div>
    $.ajax({
       type: "post",
       dataType:"json",
       data:{
          "abc":"abd"
       },
       url:"/abc/dbc.action",
    //此处必须是true,否则不好使
       async:true,
       beforeSend:function(XMLHttpRequest){
    //ajax发送之前,显示请等待
          $("#progressBarDown").show();
       },
       success:function (resultString) {
    //取消请等待
          $("#progressBarDown").hide();
          if(resultString.success){
             
          }else{
            
          }
       }
    });
    展开全文
  • 项目中有个从页面发起的AJAX请求后台需要处理十分钟以上,这导致页面超时卡死, 为了解决这个问题,经讨论,我们采用后台异步处理,用到了spring的@Async,用法很简单。 首先在spring的xml配置文件中添加如下配置: ...

    原文链接:https://blog.csdn.net/sinat_37356064/article/details/78116116

    项目中有个从页面发起的AJAX请求后台需要处理十分钟以上,这导致页面超时卡死,

    为了解决这个问题,经讨论,我们采用后台异步处理,用到了spring的@Async,用法很简单。

    首先在spring的xml配置文件中添加如下配置:

    xmlns:task="http://www.springframework.org/schema/task"
    http://www.springframework.org/schema/task
    http://www.springframework.org/schema/task/spring-task-4.0.xsd">
     
    <task:annotation-driven />	
    

    其次在需要异步执行的方法上添加@Async注解即可:

    package async;
     
    import java.util.HashMap;
    import java.util.Map;
     
    import javax.annotation.Resource;
    import javax.servlet.http.HttpServletRequest;
     
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
     
    @Controller
    public class MyController {
    	
    	@Resource
    	MyService myService;
    	
    	
    	@RequestMapping("/testAsync.do")
    	@ResponseBody
    	public Map<String, Object> testAsync(HttpServletRequest req){
    		Map<String, Object> resultMap = new HashMap<String, Object>();
    		String param = req.getParameter("param");
    		//调用异步执行的方法
    		myService.excuteAsync(param);
    		resultMap.put("resultMsg", "异步处理中...");
    		return resultMap;
    	}
     
    }
    

    ——————————————分割线——————————

    package async;
     
    import org.springframework.scheduling.annotation.Async;
     
     
    public class MyService {
    	
    	//需要异步处理的业务方法
    	@Async
    	public void excuteAsync(String param){
    		// do something;
    	}
    	
    }
    

    页面超时的问题解决了,但是异步方法什么时候执行完,

    操作人员如果想知道进度或第一时间知道执行结果怎么办呢?

    目前想到了三种解决方法:

    一、异步方法执行完后,发送邮件给操作人;

    二、实时查询后台执行的进度显示在页面;

    三、异步方法执行完后,再在页面给一个提示。

    我们采用的是第一种,至于每一种的具体实现,这里就不详述了。

    流程图
    在这里插入图片描述

    展开全文
  • AJAX请求处理等待

    2012-04-19 17:19:23
    AJAX请求处理时间,新增一个窗口提示正在处理,等待
  • ajax请求时可以json时间格式的时间转化为你想在界面上显示的任意样式,js全部都封装好了,简单易用
  • ajaxStart() 设置当前第一个AJAX请求开始时执行的处理函数。 ajaxSend() 设置在AJAX请求被发送前执行的处理函数。 ajaxComplete() 设置当AJAX请求完成(无论成功或失败)时执行的处理函数。在多个Ajax请求中,...
  • 下面给大家介绍为jquery的ajax请求添加超时timeout时间的实例 有时侯要用ajax来轮询某个服务是否可用,但是各个浏览器ajax的超时时间有可能不一样,所以希望ajax能只尝试几秒钟,然后隔几秒再次发送一次ajax检查一次...
  • springboot ajax请求数据

    千次阅读 2017-11-20 17:51:28
    springboot ajax请求数据
  • jQuery发送Ajax请求

    万次阅读 多人点赞 2018-04-23 01:21:16
    Ajax用于浏览器与服务器通信而无需刷新整个页面,服务器将不再返回整个页面,而是返回少量数据,通过JavaScript DOM更新一部分节点。期间数据传输可采用xml,json等格式,Ajax最早用于谷歌的搜索提示。 其实不刷新...
  • 问题:现公司有一个php系统,需要重复向后台发送ajax请求,但是会出现pending状态,我现在需要解决这个问题,或者说找到问题在服务器,代码,还是客户端,然后有个交代,但是不知道从何下手,毕...
  • 终止ajax请求

    千次阅读 2016-10-31 18:30:16
    多次点击发出了多个ajax请求,但我们只想要最后一个的数据,这其中同时也存在一个问题,就是多次点击后返回的数据,不确定是不是最后一个点击返回的 解决办法:jquery的abort()方法例:var ajaxRe = $.get("ajax....
  • jQuery中Ajax请求

    千次阅读 2018-01-12 10:04:40
    ajax()方法是功能最强大最齐全的请求服务器数据的方法 ajax()能够获取服务器返回的数据 ajax()能够向服务器发送并传递数值 调用的格式:jQuery.ajax([settings])或$.ajax([settings]) 参数[settings]为发送ajax...
  • ![图片说明]...这是一开始发送的请求,可以看出是正常响应了,但是到后来 !...请求未响应,大约前9个请求是响应的,发送请求时间算是比较快的, 请问下这是什么原因
  • 循环发送ajax请求

    千次阅读 2016-08-23 11:30:30
    循环发送ajax请求解决方案
  • ajax同步请求和异步请求

    千次阅读 2019-10-15 20:36:49
    ajax同步请求和异步请求前序什么是同步请求?什么是异步请求?比较同步和异步请求 前序 最近好长时间没写博客了,主要...我们先来看一下,什么是同步请求,这里主要以jquery的ajax请求为例,后端示例使用的java。 什...
  • Ajax请求监视工具

    2011-08-04 09:10:55
    监测http请求,包括头文件,请求方式以及时间线,对于js开发或者Ajax开发比不可少的工具。
  • 关于js中断ajax请求

    万次阅读 2014-02-21 16:10:48
    停止javascript的ajax请求,一种是设置超时时间让ajax自动断开,另一种为手动去停止ajax请求,其核心是调用XMLHttpRequest对象上的abort方法,这里,我们以jquery举例说明: jquery的ajax对象的abort方法 ...
  • ajax请求 session超时

    2015-01-20 07:33:27
    ajax请求,session超时的情况下,怎么跳转到首页?通过request.getHeader("x-requested-with")可以获取到是ajax请求的,也知道将信息放到response,但是页面上要写一个jquery.ajaxSetup({...})处理ajax请求时session...
  • ajax请求中文乱码

    千次阅读 2017-05-02 10:55:33
    ajax请求中文乱码使用ajax将页面中文数据传送到后台时,往往会出现乱码的情况,解决方法是,在传送前将中文进行编码,然后后台再进行解码:前台编码var requestData =window.encodeURI("要传送的中文内容");...
  • 使用了很长时间Ajax请求了,一直都是在以异步的方式在使用。昨天听了一个讲座涉及到apache server,偶然想到了这Ajax请求和HTTP请求的一些区别和联系,就在网上好好搜了一顿,把搜到的结果写一下,理清一下自己的...
  • Ajax请求超时问题

    千次阅读 2015-06-02 15:49:50
    前台发送ajax请求,默认超时时间是30000ms 1.如果针对一次ajax请求设置超时时间,可以通过如下方式:$.ajax({ async:true, //该值表示请求是否异步,默认false,true情况下,timeout失效 timeout:5000, data:{},...
  • Shiro拦截ajax请求

    千次阅读 2018-03-28 15:18:29
    今天又发现了一个新的问题,Shiro的拦截器不能够拦截ajax请求,需要自定义一个拦截器来拦截ajax请求。 package com.ssi.domains.secutity; import org.apache.shiro.SecurityUtils; import org.apache.shiro....
  • AJAX 请求队列实现

    千次阅读 2016-09-22 15:36:22
    AJAX在使用的过程中会遇到一个问题,当用户短时间内执行了多个异步请求的时候,如果前一个请求没完成,将会被取消执行最新的一个请求,大多数情况下,不会有什么影响,例如请求了一个新的列表,旧的请求也就没什么...
  • ajax请求原理分析

    千次阅读 2019-04-11 14:26:17
    向本地首选DNS服务器发送域名解析请求 建立TCP连接 三次握手 发送端首先发送一个带SYN(synchronize)标志的数据包给接收方,接收方收到后,回传一个带有SYN/ACK(acknowledegment)标志的数据包以示传达确认信...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 149,015
精华内容 59,606
关键字:

ajax请求时间过长