`

Do we ask the XHR object to be asynchronous?(关于DWR同步异步再思)

    博客分类:
  • DWR
阅读更多
DWR是AJAX的服务器端框架,它封装了服务器端的调用,我们可以在JAVASCRIPT中直接调用服务器端的代码,完成想要的功能。
通过简单DWR使用我们可以完成复杂的AJAX功能!这使得编程如此简单!
由于基于AJAX的DWR也同样继承了异步独特功能,
在享受异步便捷的时候似乎也给同步带来烦恼!

看一段dwr回调函数代码:

function addTache(tacheId,tacheName){	
		
ServicesManager.addTache(<%=servId%>,tacheId,tacheName,callBackForaddTache);
}

function callBackForaddTache(data){
	alert(data);
	return data;
}


dao.代码:该代码获取插入信息的主键Id:

public int addTache(String servId,String tacheId,String tacheName){
	  Connection cnn = DAOFactory.getConnection();
	  PreparedStatement ps = null;
	  ResultSet rs = null;
	  int i =0;
	  try {
		 ps = cnn.prepareStatement(SQL.insert_Tache);
		 ps.setString(1,servId);
		 ps.setString(2,tacheId);		
		 ps.setString(3,tacheName);
		 i = ps.executeUpdate();
		 
			//取当前case_ID
			int rows = ps.getUpdateCount();
			boolean moreResults = true;
			while (moreResults || rows != -1) {
				try {
					rs = ps.getResultSet();
				}
				catch (IllegalArgumentException e) {
					e.printStackTrace();
				}
				if (rs != null) {
					rs.next();
					i = rs.getInt( 1 ) ;
				}
				moreResults = ps.getMoreResults();
				rows = ps.getUpdateCount();
			}
	} catch (SQLException e) {
		// TODO 自动生成 catch 块
		e.printStackTrace();
	}finally{		
		DAOFactory.close(ps);
		
	}
	  return i;
  }


以上配置我们可以通过callBackForaddTache(data)获取插入信息的主键返回值!
但是如何赋值给js变量,进行删除或修改操作呢?!

把回调函数放在一起,修改js代码:
function addTache(tacheId,tacheName){	
		
	var back="";
	ServicesManager.addTache(<%=servId%>,tacheId,tacheName,function(data){
									alert(data);
									back=data;
									alert(back);
								}
	);
	alert(back)	
	return back;	
}

通过上面测试,可以发现alert(data);alert(back);都有值,但是下面的alert(back)却没有获取任何信息!
呵呵,理解了异步了吗?!
由于异步的特殊机制,导致异步获取的值但是在同步下却导致没有值可取!

在享受异步便捷的时候似乎也给同步带来烦恼!

这个时候,我们需要“返璞归真”!不要异步!!!
可以说,AJAX还是很活跃的,提供了相关的功能!
AJAX仍然也支持同步的调用。在纯粹的XMLHttpRequest中可以设置调用是否是异步的。XMLHttpRequest的open函数是有一个是否同步参数,如下:

XMLHttpRequest.open(String method, String URL, boolean asynchronous)
其中的asynchronous就是是否同步的参数了。
呵呵,这么好的功能,DWR也是支持的!
在DWR的engine.js文件,有setAsynchronous方法,就是设置调用是否是同步的,还是异步的。(可能版本不同,方法会有些区别:如,DWREngine.setAsync(false); )
看看描述的功能吧!
/**
 *[color=red] Do we ask the XHR object to be asynchronous? (Default: true)[/color] * Warning: This option will be ignored if you are using iframes and is often
 * generally a bad idea to change it to false because it can make your browser
 * slow to respond and prone to hangs. If you do need this option then consider
 * setting a timeout too.
 * @param asynchronous true or false
 */
DWREngine.setAsynchronous = function(asynchronous) {
  DWREngine._asynchronous = asynchronous;
};


呵呵,那么我们修改asynchronous,Default 的value:flase!先同步会!
不会断掉DWR的饭碗呢?\(^o^)/~,放心,在需要的地方使用后,再赋值:true!再异步!
function addTache(tacheId,tacheName){	
	
           DWREngine.setAsynchronous(false); 	
	var back="";
	ServicesManager.addTache(<%=servId%>,tacheId,tacheName,function(data){
									//alert(data);
									back=data;
									//alert(back);
								}
							);
	DWREngine.setAsynchronous(true);	
	return back;	
}

ok,万事大吉,我们调用代码:

function configTache(){
	var  flow ="0";	
	
	deleteTache(<%=servId%>);
	var taches = document.all["allfee"];		
	for (var i=0; i<taches.options.length; i++){
		    var text = taches.options[i].text;
			var index = text.indexOf(")");				
			var info2 = text.substring(index+1);			
			var dwr = addTache(taches.options[i].value,info2)
			configSequence(i,dwr);			flow += "," + taches.options[i].value;				
	}	
	ServicesManager.updateTache(<%=servId%>,flow);	
	window.cfmFee.btn_ok.disabled =false;
	window.close();	
	//window.location.href="tacheMgr.jsp";
}
分享到:
评论

相关推荐

    AJAX 与 DWR框架

    Ajax,全称 Asynchronous JavaScript and XML,是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使网页实现异步更新。Ajax 不是单一的技术,而是一组技术的...

    ajax技术和dwr介绍

    Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它的核心在于通过JavaScript与服务器进行异步数据交换,提升了用户体验,使得网页更具交互性。Ajax 不是...

    XHR-Object:一个小的XHR对象,可以轻松地执行XMLHttpRequests

    XHR对象轻松执行XMLHttpRequests的最小XHR对象如何发送POST示例const data = { id : 1 , name : 'Rose'} ;const url = 'test.html' ;xhr . request ( 'POST' , url , data , ( res ) =&gt; { console . log ( res ) ;} ...

    DWR文档

    **DWR(Direct Web Remoting)**是一种Java技术,它允许Web应用程序实现异步JavaScript与服务器端Java对象的通信,从而构建富互联网应用(RIA)。DWR简化了AJAX(Asynchronous JavaScript and XML)的使用,使前端...

    C#.net同步异步SOCKET通讯和多线程总结2[参照].pdf

    C#.net 同步异步 SOCKET 通讯和多线程总结 本文旨在总结 C#.net 中的同步异步 SOCKET 通讯和多线程编程,涵盖服务端和客户端的实现细节。 一、服务端实现 服务端使用 System.Net 和 System.Net.Sockets 命名空间...

    XHR Proxy Tool插件(chrome浏览器)

    **什么是XHR?** XMLHttpRequest(XHR)是JavaScript中一个用于在后台与服务器交换数据的API,它允许网页在不重新加载整个页面的情况下与服务器通信。这是实现AJAX(Asynchronous JavaScript and XML)技术的关键...

    前端开源库-mock-xhr

    XHR是浏览器提供的一种API,用于在后台与服务器进行异步通信,即我们常说的AJAX(Asynchronous JavaScript and XML)。通过创建XHR对象,我们可以发送GET、POST等HTTP请求,获取服务器的数据,更新页面内容,而无需...

    JavaScript - XHR实现短信验证码注册登录完整示例:JavaScript - XHR.js和附件说明

    JavaScript - XHR(XMLHttpRequest)是Web开发中的一个重要工具,用于在不刷新整个页面的情况下与服务器进行异步数据交换,这种技术通常被称为AJAX(Asynchronous JavaScript and XML),虽然现在XML已经不是数据...

    DWR + Servlet 实现文件上传功能

    xhr.open('POST', '/dwr/call/plaincall/FileUploadService.uploadFile.dwr'); xhr.upload.addEventListener('progress', function(event) { if (event.lengthComputable) { var percentComplete = Math.round...

    DWR最新中文参考手册

    AJAX(Asynchronous JavaScript and XML)的核心是XMLHttpRequest(XHR)对象,它为JavaScript提供了与服务器进行异步数据交换的能力。传统的Web应用通常在用户交互后整个页面刷新,而AJAX应用则可以通过XHR对象仅...

    AJAX同步或异步流程图

    同步AJAX流程与异步基本一致,只是`open()`方法的第三个参数设为`false`,使得浏览器等待请求完成再继续执行后续代码。 总结来说,AJAX异步通信提供了更优秀的用户体验,因为它允许用户在等待服务器响应的同时进行...

    ext-2.0.2含localXHR.rar

    这个名为"ext-2.0.2含localXHR.rar"的压缩包包含了ExtJS 2.0.2版本的一个特定更新,主要涉及到本地数据交互和帮助文档的改进。在本文中,我们将深入探讨这些关键知识点。 首先,我们要了解ExtJS 2.0.2。这是一个较...

    XHR

    XHR 博文链接:https://eric2007.iteye.com/blog/213570

    Ajax异步读取数据

    Ajax(Asynchronous JavaScript and XML)是一种在无需刷新整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使网页实现异步更新。这种技术的核心是JavaScript,利用...

    用javascript,jquery,dwr 实现ajax的入门例子

    在Web开发中,Ajax(Asynchronous JavaScript and XML)技术是一种创建动态、交互性强的网页应用的方法,它允许页面在不重新加载整个页面的情况下与服务器交换数据并更新部分网页内容。本教程将通过JavaScript、...

    XHR的简单封装xr.zip

    xr 是 XMLHttpRequest 的超简单封装,并返回 ES6 Promise。示例代码:xr.get('/api/items', {take: 5}) ... console.log("xhr", xhr);  console.log("progress", xhrProgressEvent);  }  } });

    Professional Ajax

    The book begins by exploring the roots of Ajax, covering how the evolution of the web and new technologies directly led to the development of Ajax techniques. A detailed discussion of how frames, ...

    前端项目-i18next-xhr-backend.zip

    【前端项目-i18next-xhr-backend.zip】是一个与前端国际化(i18n)相关的压缩包,其中包含了用于i18next的xhr后端层实现。i18next是广受欢迎的JavaScript国际化框架,它提供了强大的语言管理和翻译功能,支持多种...

Global site tag (gtag.js) - Google Analytics