-
问个弱弱的问题:DWR如何返回XML5
适用的DWRProxy 如下:
Ext.data.DWRProxy = function(fn){
Ext.data.DWRProxy.superclass.constructor.call(this);
this.fn = fn;
};
Ext.extend(Ext.data.DWRProxy, Ext.data.DataProxy, {
load : function(params, reader, callback, scope, arg){
params = params || {};
if(this.fireEvent("beforeload", this, params) !== false)
{
var proxy=this;
//dwr回调函数
dwrcallback = function(ret){
var result;
try
{
var o = eval("("+ret+")");
result = reader.readRecords(o);
}catch(e)
{
this.fireEvent("loadexception", this, arg, null, e);
callback.call(scope, null, arg, false);
return;
}
callback.call(scope, result, arg, true);
}
//需要将参数加入到调用参数
var callParams = new Array();
for(var i=0; i<params.length;++i)
{
callParams.push(params[i]);
}
//将回调函数加入的参数数组
callParams.push(dwrcallback);
this.fn.apply(this, callParams);
}
}
});
/**
* Ext.data.DWRStore实现对DWR调用后返回的记录进行存储
* 当调用的DWR方法返回的是JSON对象时,使用此存储类进行管理
*/
Ext.data.DWRStore = function(c){
Ext.data.DWRStore.superclass.constructor.call(this, Ext.apply(c, {
proxy: c.fn ? new Ext.data.DWRProxy(c.fn): undefined,
reader: c.reader ? c.reader : new Ext.data.JsonReader(c, c.fields)
}));
};
Ext.extend(Ext.data.DWRStore, Ext.data.Store);
/**
* Ext.data.DWRStoreEx 实现对DWR调用后返回XML字符串的存储
* 很多情况下,我们的调用都是返回一个XML串,而不是XML应答包,
* EXT中,XmlReader类只对XML应答包进行解析处理,而对于XML字符串没做这样的封装
* 此类的reader必须是XmlStringReader
*/
Ext.data.DWRStoreEx = function(c){
Ext.data.DWRStoreEx.superclass.constructor.call(this, Ext.apply(c, {
proxy: c.fn ? new Ext.data.DWRProxy(c.fn) : undefined,
reader: c.reader ? c.reader : new Ext.data.XmlStringReader(c, c.fields)
}));
};
Ext.extend(Ext.data.DWRStoreEx, Ext.data.Store);
/**
* @class Ext.data.XmlReader
* @extends Ext.data.DataReader
* Data reader class to create an Array of {@link Ext.data.Record} objects from an XML document
* based on mappings in a provided Ext.data.Record constructor.<br><br>
* <p>
* <em>Note that in order for the browser to parse a returned XML document, the Content-Type
* header in the HTTP response must be set to "text/xml".</em>
* <p>
* Example code:
* <pre><code>
var Employee = Ext.data.Record.create([
{name: 'name', mapping: 'name'}, // "mapping" property not needed if it's the same as "name"
{name: 'occupation'} // This field will use "occupation" as the mapping.
]);
var myReader = new Ext.data.XmlStringReader({
totalRecords: "results", // The element which contains the total dataset size (optional)
record: "row", // The repeated element which contains row information
id: "id" // The element within the row that provides an ID for the record (optional)
}, Employee);
</code></pre>
* <p>
* This would consume an XML file like this:
* <pre><code>
<?xml version="1.0" encoding="UTF-8"?>
<dataset>
<results>2</results>
<row>
<id>1</id>
<name>Bill</name>
<occupation>Gardener</occupation>
</row>
<row>
<id>2</id>
<name>Ben</name>
<occupation>Horticulturalist</occupation>
</row>
</dataset>
</code></pre>
* @cfg {String} totalRecords The DomQuery path from which to retrieve the total number of records
* in the dataset. This is only needed if the whole dataset is not passed in one go, but is being
* paged from the remote server.
* @cfg {String} record The DomQuery path to the repeated element which contains record information.
* @cfg {String} success The DomQuery path to the success attribute used by forms.
* @cfg {String} id The DomQuery path relative from the record element to the element that contains
* a record identifier value.
* @constructor
* Create a new XmlReader.
* @param {Object} meta Metadata configuration options
* @param {Object} recordType Either an Array of field definition objects as passed to
* {@link Ext.data.Record#create}, or a Record constructor object created using {@link Ext.data.Record#create}.
*/
Ext.data.XmlStringReader = function(meta, recordType){
meta = meta || {};
Ext.data.XmlStringReader.superclass.constructor.call(this, meta, recordType || meta.fields);
};
Ext.extend(Ext.data.XmlStringReader, Ext.data.DataReader, {
/**
* This method is only used by a DataProxy which has retrieved data from a remote server.
* @param {Object} response The XHR object which contains the parsed XML document. The response is expected
* to contain a property called <tt>responseXML</tt> which refers to an XML document object.
* @return {Object} records A data block which is used by an {@link Ext.data.Store} as
* a cache of Ext.data.Records.
*/
read : function(response){
var strText = response.responseText;
if(!strText) {
throw {message: "XmlReader.read: XML Document not available"};
}
return this.readRecords(strText);
},
/**
* Ext.data.XmlStringReader.parseText
* 将strText字符串解析为XMLDocument对象
*/
parseText : function(strText)
{
var xmlDom = null;
if(null != strText)
{
try //Internet Explorer
{
xmlDom=new ActiveXObject("Microsoft.XMLDOM");
}
catch(e)
{
try //Firefox, Mozilla, Opera, etc.
{
xmlDom=document.implementation.createDocument("","",null);
}
catch(e) {throw {message: e.message};}
}
try
{
xmlDom.async = "true";
xmlDom.loadXML(strText);
}catch(e) {
throw {message: e.message};
}
}
return xmlDom;
},
/**
* Create a data block containing Ext.data.Records from an XML document.
* @param {Object} doc A parsed XML document.
* @return {Object} records A data block which is used by an {@link Ext.data.Store} as
* a cache of Ext.data.Records.
*/
readRecords : function(strText){
/**
* After any data loads/reads, the raw XML Document is available for further custom processing.
* @type XMLDocument
*/
var doc = this.parseText(strText);
//doc.save('c:\temp.xml');
//var tmproot = doc.documentElement;
//alert('XML rows:'+ tmproot.childNodes.length);
this.xmlData = doc;
var root = doc.documentElement || doc;
var q = Ext.DomQuery;
var recordType = this.recordType;
var fields = recordType.prototype.fields;
var sid = this.meta.id;
var totalRecords = 0, success = true;
if(this.meta.totalRecords){
totalRecords = q.selectNumber(this.meta.totalRecords, root, 0);
}
if(this.meta.success){
var sv = q.selectValue(this.meta.success, root, true);
success = sv !== false && sv !== 'false';
}
var records = [];
var ns = q.select(this.meta.record, root);
for(var i = 0, len = ns.length; i < len; i++) {
var n = ns[i];
var values = {};
var id = sid ? q.selectValue(sid, n) : undefined;
for(var j = 0, jlen = fields.length; j < jlen; j++){
var f = fields.items[j];
var v = q.selectValue(f.mapping || f.name, n, f.defaultValue);
v = f.convert(v, n);
values[f.name] = v;
}
var record = new recordType(values, id);
record.node = n;
records[records.length] = record;
}
return {
success : success,
records : records,
totalRecords : totalRecords || records.length
};
}
});
现在问题是能调用 但是DWR在调用成功后会eval(返回的字符串)2008年7月01日 17:35
目前还没有答案
相关推荐
ajax框架:dwr实战.pdfajax框架:dwr实战.pdfajax框架:dwr实战.pdfajax框架:dwr实战.pdfajax框架:dwr实战.pdf
6. **调试工具**:DWR提供了一个内置的调试器,可以帮助开发者追踪和调试AJAX请求,查看服务器返回的数据,以及跟踪错误。 7. **跨域支持**:DWR通过设置CORS(跨源资源共享)策略,可以实现在不同域名下的页面间...
DWR(Direct Web Remoting)是一个开源的Java库,它允许JavaScript在浏览器中与服务器上的Java对象进行交互,实现了Web应用中的Ajax功能。DWR使得Web开发者可以方便地在客户端进行服务器端方法的调用,极大地提升了...
2. **映射机制**:DWR通过配置文件(通常为dwr.xml)定义了JavaScript对象与Java对象之间的映射关系,使得前端能够通过JavaScript对象调用后端的Java方法。 3. **安全控制**:DWR提供了安全控制机制,例如白名单...
ajax框架:dwr》实战(包括整合)ajax框架:dwr》实战(包括整合)ajax框架:dwr》实战(包括整合)ajax框架:dwr》实战(包括整合)
dwr配置文件是一个XML文件,名称通常为dwr.xml。它的结构主要包括以下几个部分: * `dwr`:根元素,用于定义DWR的配置设置。 * `allow`:定义允许远程调用的Java对象和方法。 * `create`:定义如何创建Java对象的...
- **应用实例**:例如,服务器端返回一个`List<User>`,DWR会将其转换为JavaScript数组。 **6. JAVA对象与JS对象的对接** - **对象映射**:DWR支持将Java对象映射为JavaScript对象,方便在客户端使用。 - **属性...
ajax框架:dwr》实战(包括整合).pdfajax框架:dwr》实战(包括整合).pdfajax框架:dwr》实战(包括整合).pdfajax框架:dwr》实战(包括整合).pdf
ajax框架:dwr和ext实战.pdf ajax框架:dwr和ext实战.pdf ajax框架:dwr和ext实战.pdf
ajax框架:dwr+实战(包括整合) ajax框架:dwr+实战(包括整合) ajax框架:dwr+实战(包括整合)
《ajax框架:dwr与ext》实战《ajax框架:dwr与ext》实战
ajax框架:dwr 实战(包括整合).
### dwr.xml 文件知识点解析 #### 一、DWR(Direct Web Remoting)简介 DWR(Direct Web Remoting)是一种简化Ajax应用开发的技术。它允许JavaScript直接调用服务器端的Java方法,使得开发者能够更加方便地进行...
例如,服务器端有一个方法`getString()`返回一个字符串,DWR会自动将这个字符串传递给JavaScript回调函数。这在显示消息、错误信息或者简单的数据交换中非常有用。 2. **返回对象**: DWR支持将Java对象转换为JSON...
ajax框架:dwr与ext》实战.pdf
6. **缓存管理**:DWR提供了一种缓存机制,可以缓存服务器返回的结果,减少不必要的网络传输,提高性能。 7. **批量调用与异步调用**:DWR支持批量执行多个服务器调用,并且可以异步执行这些调用,使得用户界面不会...