- 浏览: 531667 次
- 性别:
- 来自: 山东济南
文章分类
最新评论
-
dragon_8844:
非常不错,nice
java.util.concurrent 多线程框架 -
wusendong:
很好的文章!受益匪浅,谢谢!
java.util.concurrent 多线程框架 -
SINCE1978:
你也关注并发啊
java.util.concurrent 多线程框架 -
lku1314:
这个不错 刚刚找到这个组建 以前孤陋寡闻了 像lz学习!标 ...
quartz 在WEB中应用小结 -
lliiqiang:
人们对于目标需要的需求明确的去做,对于目标以外的因素是随机的执 ...
flex和后端的数据交互(一)--XML和HTTPService
最近不怎么忙,正用dhtmlXGrid搞一个自己的小系统!
前一个页面都正常,前天做一个新页面的时候出现了问题:页面不能正常解析服务器端返回的数据,总是报Incorrect XML的错误;
百度了一下,又进行了调试得知是receponseXML为空导致的。可是我前一个页面也是使用的同一个Util类生成的XML文件的啊!
由于需要的xml文件比较简单,也没有采用xml文件的生成工具,这下麻烦死了。
从昨天就开始找问题所在,搞得头都大了,也还是没戏!
将重要部分的代码贴出来,请各位帮忙瞅瞅!
发送请求(来自dhtmlXCommon.js)
////////////////////////////////////////
//下面是取首节点,其中tagName为"rows"
出错页面调用时,我用alert(this.xmlDoc.responseXML.xml)查看的到是空值;用alert(this.xmlDoc.responseText)查看得到的是本页面的html文件;而在没有错误的页面得到的都是服务器传回的XML文件。
这是我生成xml文件的类XmlUtil.java
这是在service层的处理方法
其他的地方没有什么特别的了;
我在网上搜了一下,有网友对这种问题总结了四种错误:
调试此问题的四个步骤:
1. 是否将 content type 设置为 text/xml 文件格式?
2. 是否确定将请求发送到服务器端了?
3. 输出 responseText,返回的内容是否是你想要的xml文件 ?
4. 在浏览器中直接输入返回 xml 文档的网址,检查一下返回的 xml 格式是否正确。
原文网址:
http://radio.javaranch.com/pascarello/2006/09/12/1158096122600.html
请求能够发送到服务器端,我在将xml返回前在服务器端输出了xml,显示正常,服务器端也能正常响应请求,输出的responseText不对,看来我就是第三种啊!
用ajax时间不长,还请各位多多帮忙!
哦!谢谢!我再搞搞看看!
前一个页面都正常,前天做一个新页面的时候出现了问题:页面不能正常解析服务器端返回的数据,总是报Incorrect XML的错误;
百度了一下,又进行了调试得知是receponseXML为空导致的。可是我前一个页面也是使用的同一个Util类生成的XML文件的啊!
由于需要的xml文件比较简单,也没有采用xml文件的生成工具,这下麻烦死了。
从昨天就开始找问题所在,搞得头都大了,也还是没戏!
将重要部分的代码贴出来,请各位帮忙瞅瞅!
发送请求(来自dhtmlXCommon.js)
dtmlXMLLoaderObject.prototype.loadXML = function (filePath, postMode, postVars) { if (this.rSeed) { filePath += ((filePath.indexOf("?") != -1) ? "&" : "?") + "a_dhx_rSeed=" + (new Date()).valueOf(); } this.filePath = filePath; alert(this.filePath); if (window.XMLHttpRequest) { this.xmlDoc = new XMLHttpRequest(); this.xmlDoc.open(postMode ? "POST" : "GET", filePath, this.async); if (postMode) { this.xmlDoc.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); } this.xmlDoc.onreadystatechange = new this.waitLoadFunction(this); this.xmlDoc.send(null || postVars); } else { if (document.implementation && document.implementation.createDocument) { this.xmlDoc = document.implementation.createDocument("", "", null); this.xmlDoc.onload = new this.waitLoadFunction(this); this.xmlDoc.load(filePath); } else { this.xmlDoc = new ActiveXObject("Microsoft.XMLHTTP"); this.xmlDoc.open(postMode ? "POST" : "GET", filePath, this.async); if (postMode) { this.xmlDoc.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); } this.xmlDoc.onreadystatechange = new this.waitLoadFunction(this); this.xmlDoc.send(null || postVars); } } }; /////////////////////////////////////////////////////////////////////////// dtmlXMLLoaderObject.prototype.waitLoadFunction = function (dhtmlObject) { this.check = function () { if (dhtmlObject.onloadAction != null) { if ((!dhtmlObject.xmlDoc.readyState) || (dhtmlObject.xmlDoc.readyState == 4)) { dhtmlObject.onloadAction(dhtmlObject.mainObject, null, null, null, dhtmlObject); if (dhtmlObject.waitCall) { dhtmlObject.waitCall(); dhtmlObject.waitCall = null; } dhtmlObject = null; } } }; return this.check; };
////////////////////////////////////////
//下面是取首节点,其中tagName为"rows"
出错页面调用时,我用alert(this.xmlDoc.responseXML.xml)查看的到是空值;用alert(this.xmlDoc.responseText)查看得到的是本页面的html文件;而在没有错误的页面得到的都是服务器传回的XML文件。
dtmlXMLLoaderObject.prototype.getXMLTopNode = function (tagName) { if (this.xmlDoc.responseXML) { var temp = this.xmlDoc.responseXML.getElementsByTagName(tagName); var z = temp[0]; } else { var z = this.xmlDoc.documentElement; } if (z) { this._retry = false; return z; } if ((_isIE) && (!this._retry)) { var xmlString = this.xmlDoc.responseText; this._retry = true; this.xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); this.xmlDoc.async = false; this.xmlDoc.loadXML(xmlString); return this.getXMLTopNode(tagName); } dhtmlxError.throwError("LoadXML", "Incorrect XML", [this.xmlDoc, this.mainObject]); return document.createElement("DIV"); };
这是我生成xml文件的类XmlUtil.java
package pfm.web.util; import java.io.BufferedInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; public class XmlUtil { StringBuffer xmlBuffer = new StringBuffer(); HttpServletRequest request = null; HttpServletResponse response = null; public XmlUtil(HttpServletRequest request, HttpServletResponse response) { this.request = request; this.response = response; xmlBuffer.append("<?xml version='1.0' encoding='UTF-8'?>"); xmlBuffer.append("<rows>"); xmlBuffer.append("</rows>"); } public void setId(String id) { xmlBuffer.insert(xmlBuffer.lastIndexOf("</rows>"), "<row id='" + id + "'></row>"); } public void setXmlData(Object cell) { if (xmlBuffer.lastIndexOf("</row>") > 0) xmlBuffer.insert(xmlBuffer.lastIndexOf("</row>"), "<cell>" + cell + "</cell>"); } public String getXmlFile() { return new String(xmlBuffer); } /** * 从请求的输入流中读取并解析数据 */ public List getXmlData() { List l = new ArrayList(); try { SAXBuilder xmlbuiilder = new SAXBuilder(); BufferedInputStream buinst = new BufferedInputStream(request.getInputStream()); Document document = xmlbuiilder.build(buinst); Element root = document.getRootElement(); for (Iterator it = root.getChildren("row").iterator(); it.hasNext();) { Element row = (Element) it.next(); Object[] o = new Object[row.getChildren().size() + 1]; o[0] = row.getAttributeValue("id"); int i = 1; if (!row.getChildren().isEmpty()) for (Iterator itcell = row.getChildren("cell").iterator(); itcell.hasNext();) { Element cell = (Element) itcell.next(); o[i++] = cell.getText(); } l.add(o); } } catch (Exception e) { e.printStackTrace(); } return l; } /** * 将服务器响应以xml形式返回客户端 */ public void returnResultXml(String resultxml) { System.out.println("resultxml==" + resultxml); try { response.setContentType("text/xml; charset=UTF-8"); response.setHeader("Cache-Control", "no-cache"); response.getWriter().write(resultxml); response.getWriter().flush(); } catch (IOException e) { e.printStackTrace(); try { response.getWriter().write("<flag>0</flag>"); } catch (Exception fe) { } } } }
这是在service层的处理方法
public class DailyReceiptsServiceImp implements DailyReceiptsService { private DailyReceiptsDao dailyReceiptsDao; private HelpUtil help; public void setDailyReceiptsDao(DailyReceiptsDao dailyReceiptsDao) { this.dailyReceiptsDao = dailyReceiptsDao; } public void buildQueryXML(HttpServletRequest request, HttpServletResponse response) { XmlUtil xmlutil = new XmlUtil(request, response); help = new HelpUtil(); List list = this.dailyReceiptsDao.findTotal(); if (list != null) { for (Iterator it = list.iterator(); it.hasNext();) { DailyReceipts dailyReceipts = (DailyReceipts) it.next(); xmlutil.setId(dailyReceipts.getId().toString()); xmlutil.setXmlData(dailyReceipts.getIncomer()); xmlutil.setXmlData(dailyReceipts.getIncometype()); xmlutil.setXmlData(help.myDateFormat(dailyReceipts.getIncomedate())); xmlutil.setXmlData(dailyReceipts.getCurrencytype()); xmlutil.setXmlData(dailyReceipts.getState()); xmlutil.setXmlData(help.chanToGB(dailyReceipts.getLocation())); } } xmlutil.returnResultXml(xmlutil.getXmlFile()); } }
其他的地方没有什么特别的了;
我在网上搜了一下,有网友对这种问题总结了四种错误:
调试此问题的四个步骤:
1. 是否将 content type 设置为 text/xml 文件格式?
2. 是否确定将请求发送到服务器端了?
3. 输出 responseText,返回的内容是否是你想要的xml文件 ?
4. 在浏览器中直接输入返回 xml 文档的网址,检查一下返回的 xml 格式是否正确。
原文网址:
http://radio.javaranch.com/pascarello/2006/09/12/1158096122600.html
请求能够发送到服务器端,我在将xml返回前在服务器端输出了xml,显示正常,服务器端也能正常响应请求,输出的responseText不对,看来我就是第三种啊!
用ajax时间不长,还请各位多多帮忙!
评论
8 楼
daoger
2007-08-03
其实很简单,是一个低级错误;我在转发页面的时候,应该return null.
7 楼
zhenhui
2007-07-31
能不能告诉我怎么解决这个问题?
6 楼
daoger
2007-01-15
问题解决了!
是我在服务器端进行数据校验后,使用springMVC页面转向的问题!
是我在服务器端进行数据校验后,使用springMVC页面转向的问题!
5 楼
daoger
2007-01-12
Ivan Li 写道
dhtmgrid如果返回的是text,它会自己把它转化成document对象的,构建XML对象,建议使用dom4j,很方便的说
dtmlXMLLoaderObject.prototype.loadXMLString=function(xmlString){ try { var parser = new DOMParser(); this.xmlDoc = parser.parseFromString(xmlString,"text/xml"); } catch(e){ this.xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); this.xmlDoc.async=this.async; this.xmlDoc.loadXML(xmlString); } this.onloadAction(this.mainObject,null,null,null,this); if(this.waitCall){this.waitCall();this.waitCall=null;} }
哦!谢谢!我再搞搞看看!
4 楼
IvanLi
2007-01-12
dhtmgrid如果返回的是text,它会自己把它转化成document对象的,构建XML对象,建议使用dom4j,很方便的说
dtmlXMLLoaderObject.prototype.loadXMLString=function(xmlString){ try { var parser = new DOMParser(); this.xmlDoc = parser.parseFromString(xmlString,"text/xml"); } catch(e){ this.xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); this.xmlDoc.async=this.async; this.xmlDoc.loadXML(xmlString); } this.onloadAction(this.mainObject,null,null,null,this); if(this.waitCall){this.waitCall();this.waitCall=null;} }
3 楼
LucasLee
2007-01-12
我以前也碰到responseXML为空的问题,但是responseText不为空,后来我就统一用responseText作为返回值了,当然,我用的也不是XML格式。
2 楼
daoger
2007-01-12
现在前几个页面中也或多或少的存在一些bug.而且我还没搞清楚是我的代码有问题还是dhtmlXGrid(免费版)的问题,问题解决了我会把代码共享出来的!
1 楼
waiangelet
2007-01-11
我也想学习这方面的实例,你可不可以把上面的资料打个包共享出来阿?先谢谢了。
发表评论
-
ubuntu14.04下编译安装Tora
2015-08-11 16:19 1210需预先安装oracle客户端;以下类库,有的可能需要提前安 ... -
ubuntu14.04下oracle客户端最小化安装
2015-08-11 16:04 1058在Oracle官网下载Oracle Instant Clien ... -
ubuntu14.04下编译安装QT
2015-08-11 16:03 15051. 首先配置一些编译Qt ... -
55种开源可视化数据分析工具
2015-07-22 14:50 0http://mp.weixin.qq.com/s?__bi ... -
响应式设计理念
2013-09-29 10:00 0概念 响应式Web设计(Responsive Web desi ... -
Liferay 使用随笔
2010-04-19 14:18 01.如何根据权限去除每一个portlet中右上角的选项。 关于 ... -
Liferay中ajax应用用户session超时
2010-03-26 09:31 3918基于Liferay Portal开发ajax应用时,如果长时间 ... -
Liferay portlet实例化配置
2009-11-10 09:06 4375在默认的情况下,一个p ... -
带checkbox的dhtmlxtree菜单树异步加载时的问题解决
2009-10-24 11:27 5973最近一直很忙,自己负责几个模块的设计开发,还有和其他服务接口的 ... -
JS代码示例
2009-10-21 14:23 22821.数组操作时的push var a = [],b = [ ... -
dhtmlxtree异步加载时的一个bug修正
2009-09-15 10:00 3808前面已经对dhtmlx的东西有所介绍,使用中也发现了不少bug ... -
WEB Page to PDF
2009-06-17 11:10 2548现在有很多网页页面转换成PDF文档的支持项目,我使用的是pd4 ... -
Liferay中使用dhtmlxlayout在IE下的问题
2009-06-12 13:43 2098Liferay 中使用dhemtlx系列UI的时候,dhtml ... -
Liferay相关配置
2009-06-10 13:35 1259修改liferay中portlet的加载目录 前面 ... -
Spring JDBC对Oracle10g数据库操作时RowSet的问题
2009-05-19 08:56 3469使用Spring JDBC对Oracle10g进行数据库分页的 ... -
Dynamic Tables In JavaScript for IE and Firefox
2009-05-06 14:03 1712http://www.sweetvision.com/2007 ... -
liferay中对struts桥接处理后的response
2009-04-18 14:29 1837对于在liferay开发平台中 ... -
liferay开发小记---Struts,Spring,Hibernate架构
2009-04-07 11:11 6261liferay有自己的struts和spring扩展,有兴趣的 ... -
liferay开发小记---portlet文件构造
2009-04-03 17:09 3280书接上回,说说portlet的开发,每一个portlet就是对 ... -
liferay开发小记---开发环境的搭建
2009-04-02 13:42 3805用惯了MyEclipse,我的环境也是在它上面搭建的,试用过M ...
相关推荐
在异步调用webservice的过程中,返回的responseXML为空是一个相对常见的问题。这通常与浏览器兼容性、XML处理方法或者SOAP消息格式有关。下面,我们将详细介绍与这一问题相关的知识点。 ### JavaScript对XML的加载...
- 当readyState为0、1或2时,responseText为空字符串。 - 当readyState为3时,responseText包含未完成的响应信息。 - 当readyState为4时,responseText包含完整的响应信息。 - **responseXML**:当readyState为4...
3. **执行替换操作**:调用`Replace`方法,传入需要处理的字符串`ResponseXml`以及替换为空字符串(即`""`),从而达到去除字符串中所有空格的目的。 4. **返回处理结果**:将处理后的字符串返回给调用者。 #### ...
- 在`readyState`为0、1或2时,`responseText`为空字符串。 - 在`readyState`为3时,`responseText`包含部分响应文本。 - 在`readyState`为4时,`responseText`包含完整的响应文本。 ##### 3. **responseXML属性...
在`readyState`为0、1或2时,该属性为空字符串;在`readyState`为3时,包含部分响应文本;当`readyState`达到4时,表示响应已完全接收,`responseText`包含完整响应内容。 **4. responseXML属性** 对于XML格式的...
- `send()`:发送请求,如果是GET请求,可以为空;如果是POST请求,需要传入数据。 - `abort()`:中断当前的HTTP请求。 - `setRequestHeader()`:设置HTTP请求头,例如设置Content-Type为"application/x-...
- 调用 `send()` 方法,如果为 GET 请求,可直接发送空参数;如果是 POST 请求,则需要传递数据。 - 注册 `onreadystatechange` 事件处理函数,检查 `readyState` 和 `status` 状态,确保请求已完成且成功。 4. *...
var XMLHttpReq = false;... window.alert("用户名不能为空。"); document.myform.uname.focus(); return false; } else { sendRequest('login2?uname='+ uname + '&psw=' + psw); } } </script>
如果是GET请求,data应为空。 3. `abort()`:取消当前的HTTP请求。 XMLHTTP对象还有其他辅助方法,如`setRequestHeader(header, value)`用于设置HTTP请求头,以及`setTimeouts(timeout, timeout, timeout, timeout)...
很好的ajax实例 ... window.alert("用户名不能为空。"); document.myform.uname.focus(); return false; } else { sendRequest('login2?uname='+ uname + '&psw=' + psw); } } </script>
对于GET请求,参数为空;对于POST请求,参数通常是序列化后的数据。 4. 监听状态变化:通过`onreadystatechange`事件监听请求状态。xhr.readyState有五个状态,0-4分别代表请求的不同阶段。 5. 处理响应:当状态变为...
例如,检查`xmlDoc`是否不为空,确认XML文档是否已成功加载并准备就绪。 案例1展示了一个简单的HTML页面内嵌JS脚本加载XML文档的例子。在这个例子中,XML文件包含书籍数据,而HTML页面中的JavaScript代码创建了DOM...
6. **处理响应**:当`readyState`为4且`status`为200时,表示请求成功,此时可以通过`responseText`或`responseXML`获取服务器响应。 ### 三、Ajax与SQL结合 在实际应用中,Ajax常用于与数据库进行交互。这里以...
- responseText或responseXML属性:分别用于获取响应的数据,前者为文本形式,后者为XML形式(如果服务器返回XML数据)。 - onreadystatechange事件:当readyState属性变化时触发,通常用来监控请求的进度。 - ...
5. **处理响应**:在`onreadystatechange`事件处理程序中,当`readyState`为4(表示请求完成)且`status`为200(表示请求成功)时,可以通过`responseText`或`responseXML`获取服务器的响应数据。 6. **更新页面**...
当readyState属性值变为4(表示请求已完成),且status属性值为200(表示成功)时,我们可以通过responseText或responseXML获取服务器返回的数据。 2. **GET请求示例** - **GET请求**是最常见的Ajax请求方式,用于...
对于GET请求,参数为空;对于POST请求,可以传递数据。 ### 三、处理响应 1. `onreadystatechange`事件:当服务器响应状态改变时触发,通过`readyState`属性检查请求是否完成。 2. `status`属性:返回HTTP状态码...
如果是GET请求,参数为空;POST请求时,参数为要发送的数据。 4. 监听状态变化:通过`onreadystatechange`事件监听请求状态。当状态变为4(表示请求已完成)且状态码为200(表示成功)时,表示请求成功。 5. 处理...