0 0

问个弱弱的问题: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>
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;dataset>
&lt;results>2&lt;/results>
&lt;row>
   &lt;id>1&lt;/id>
   &lt;name>Bill&lt;/name>
   &lt;occupation>Gardener&lt;/occupation>
&lt;/row>
&lt;row>
   &lt;id>2&lt;/id>
   &lt;name>Ben&lt;/name>
   &lt;occupation>Horticulturalist&lt;/occupation>
&lt;/row>
&lt;/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(返回的字符串)
DWR 
2008年7月01日 17:35
目前还没有答案

相关推荐

    ajax框架:dwr实战.pdf

    ajax框架:dwr实战.pdfajax框架:dwr实战.pdfajax框架:dwr实战.pdfajax框架:dwr实战.pdfajax框架:dwr实战.pdf

    JavaScript:DWR的用法实例

    6. **调试工具**:DWR提供了一个内置的调试器,可以帮助开发者追踪和调试AJAX请求,查看服务器返回的数据,以及跟踪错误。 7. **跨域支持**:DWR通过设置CORS(跨源资源共享)策略,可以实现在不同域名下的页面间...

    引:dwr实例

    DWR(Direct Web Remoting)是一个开源的Java库,它允许JavaScript在浏览器中与服务器上的Java对象进行交互,实现了Web应用中的Ajax功能。DWR使得Web开发者可以方便地在客户端进行服务器端方法的调用,极大地提升了...

    ajax框架:dwr 实战(包括整合

    2. **映射机制**:DWR通过配置文件(通常为dwr.xml)定义了JavaScript对象与Java对象之间的映射关系,使得前端能够通过JavaScript对象调用后端的Java方法。 3. **安全控制**:DWR提供了安全控制机制,例如白名单...

    ajax框架:dwr》实战(包括整合)

    ajax框架:dwr》实战(包括整合)ajax框架:dwr》实战(包括整合)ajax框架:dwr》实战(包括整合)ajax框架:dwr》实战(包括整合)

    dwr配置文件详解 dwr.xml配置文件详解

    dwr配置文件是一个XML文件,名称通常为dwr.xml。它的结构主要包括以下几个部分: * `dwr`:根元素,用于定义DWR的配置设置。 * `allow`:定义允许远程调用的Java对象和方法。 * `create`:定义如何创建Java对象的...

    ajax框架:dwr与ext实践_.pdf

    - **应用实例**:例如,服务器端返回一个`List&lt;User&gt;`,DWR会将其转换为JavaScript数组。 **6. JAVA对象与JS对象的对接** - **对象映射**:DWR支持将Java对象映射为JavaScript对象,方便在客户端使用。 - **属性...

    ajax框架:dwr》实战(包括整合).pdf

    ajax框架:dwr》实战(包括整合).pdfajax框架:dwr》实战(包括整合).pdfajax框架:dwr》实战(包括整合).pdfajax框架:dwr》实战(包括整合).pdf

    ajax框架:dwr和ext实战.pdf

    ajax框架:dwr和ext实战.pdf ajax框架:dwr和ext实战.pdf ajax框架:dwr和ext实战.pdf

    ajax框架:dwr+实战(包括整合)

    ajax框架:dwr+实战(包括整合) ajax框架:dwr+实战(包括整合) ajax框架:dwr+实战(包括整合)

    《ajax框架:dwr与ext》实战

    《ajax框架:dwr与ext》实战《ajax框架:dwr与ext》实战

    ajax框架:dwr 实战(包括整合)

    ajax框架:dwr 实战(包括整合).

    dwr.xml文件

    ### dwr.xml 文件知识点解析 #### 一、DWR(Direct Web Remoting)简介 DWR(Direct Web Remoting)是一种简化Ajax应用开发的技术。它允许JavaScript直接调用服务器端的Java方法,使得开发者能够更加方便地进行...

    DWR 初始,返回字符串&对象&列表

    例如,服务器端有一个方法`getString()`返回一个字符串,DWR会自动将这个字符串传递给JavaScript回调函数。这在显示消息、错误信息或者简单的数据交换中非常有用。 2. **返回对象**: DWR支持将Java对象转换为JSON...

    ajax框架:dwr与ext》实战.pdf

    ajax框架:dwr与ext》实战.pdf

    Ajax框架:简单的dwr实例

    6. **缓存管理**:DWR提供了一种缓存机制,可以缓存服务器返回的结果,减少不必要的网络传输,提高性能。 7. **批量调用与异步调用**:DWR支持批量执行多个服务器调用,并且可以异步执行这些调用,使得用户界面不会...

Global site tag (gtag.js) - Google Analytics