Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript webserivce中的Json存储在ExtJS 4.0中工作,但在4.2中不工作_Javascript_Json_Web Services_Extjs_Extjs4 - Fatal编程技术网

Javascript webserivce中的Json存储在ExtJS 4.0中工作,但在4.2中不工作

Javascript webserivce中的Json存储在ExtJS 4.0中工作,但在4.2中不工作,javascript,json,web-services,extjs,extjs4,Javascript,Json,Web Services,Extjs,Extjs4,我有以下简单的HTML。它在使用ExtJS4时工作,但在使用ExtJS4.2时不工作 在这两种情况下,都会调用webservice,但在使用ExtJS 4.2时,store.data为空 我猜这就是问题所在(ExtJS 4.2不支持这里的某些内容,但我不确定是什么): 这是完整的代码: <body> <div id="ext-grid"> </div> <script type="text/javascript"> Ext.require(

我有以下简单的HTML。它在使用ExtJS4时工作,但在使用ExtJS4.2时不工作

在这两种情况下,都会调用webservice,但在使用ExtJS 4.2时,
store.data
为空

我猜这就是问题所在(ExtJS 4.2不支持这里的某些内容,但我不确定是什么):

这是完整的代码:

<body>
<div id="ext-grid">
</div>
<script type="text/javascript">
    Ext.require([
            'Ext.grid.*',
            'Ext.data.*',
            'Ext.panel.*',
            'Ext.layout.container.Border'
        ]);

    Ext.define('Ext.AspWebAjaxProxy', {
        extend: 'Ext.data.proxy.Ajax',
        require: 'Ext.data',

        buildRequest: function (operation) {
            var params = Ext.applyIf(operation.params || {}, this.extraParams || {}),
                                request;
            params = Ext.applyIf(params, this.getParams(params, operation));
            if (operation.id && !params.id) {
                params.id = operation.id;
            }

            params = Ext.JSON.encode(params);

            request = Ext.create('Ext.data.Request', {
                params: params,
                action: operation.action,
                records: operation.records,
                operation: operation,
                url: operation.url
            });
            request.url = this.buildUrl(request);
            operation.request = request;
            return request;
        }
    });

    Ext.onReady(function () {
        Ext.define('Actors', {
            extend: 'Ext.data.Model',
            fields: ['FirstName', 'LastName', 'EmailAddress', 'Salary']
        });


        store = new Ext.data.Store(
            {
                proxy: new Ext.AspWebAjaxProxy({
                    url: 'service.asmx/LoadRecords',
                    actionMethods: {
                        read: 'POST'
                    },
                    reader: {
                        type: 'json',
                        model: 'Actors',
                        root: 'd'
                    },
                    headers: {
                        'Content-Type': 'application/json; charset=utf-8'
                    }
                })
            });


        var grid = Ext.create('Ext.grid.Panel', {
            store: store,
            columns: [
                        { text: 'FirstName', dataIndex: 'FirstName', width: 280, sortable: true },
                        { text: 'LastName', dataIndex: 'LastName', sortable: true },
                        { text: 'EmailAddress', dataIndex: 'EmailAddress', width: 150, sortable: true },
                        { text: 'Salary', dataIndex: 'Salary', sortable: true }
                       ],
            renderTo: 'ext-grid'
        });

        store.load();
    });
</script>
</body>

我认为问题在于您重新定义了buildRequest方法。在4.0版和4.2版之间,此函数的内部结构可能发生了变化


ExtJs 4.2提供了非常广泛的可能性来配置发送请求的方式,因此不需要重新定义该函数

你得到的JSON是相当标准的,它应该可以工作。请求必须是什么样子?如果你能详细说明这一点,我可能会帮助你更好。我解决了这个问题,我删除了ActionMethod,并以GET的形式处理了webservice调用。你是对的,我使用了常规的Ext.Data.HttpProxy,它现在可以工作了。
<body>
<div id="ext-grid">
</div>
<script type="text/javascript">
    Ext.require([
            'Ext.grid.*',
            'Ext.data.*',
            'Ext.panel.*',
            'Ext.layout.container.Border'
        ]);

    Ext.define('Ext.AspWebAjaxProxy', {
        extend: 'Ext.data.proxy.Ajax',
        require: 'Ext.data',

        buildRequest: function (operation) {
            var params = Ext.applyIf(operation.params || {}, this.extraParams || {}),
                                request;
            params = Ext.applyIf(params, this.getParams(params, operation));
            if (operation.id && !params.id) {
                params.id = operation.id;
            }

            params = Ext.JSON.encode(params);

            request = Ext.create('Ext.data.Request', {
                params: params,
                action: operation.action,
                records: operation.records,
                operation: operation,
                url: operation.url
            });
            request.url = this.buildUrl(request);
            operation.request = request;
            return request;
        }
    });

    Ext.onReady(function () {
        Ext.define('Actors', {
            extend: 'Ext.data.Model',
            fields: ['FirstName', 'LastName', 'EmailAddress', 'Salary']
        });


        store = new Ext.data.Store(
            {
                proxy: new Ext.AspWebAjaxProxy({
                    url: 'service.asmx/LoadRecords',
                    actionMethods: {
                        read: 'POST'
                    },
                    reader: {
                        type: 'json',
                        model: 'Actors',
                        root: 'd'
                    },
                    headers: {
                        'Content-Type': 'application/json; charset=utf-8'
                    }
                })
            });


        var grid = Ext.create('Ext.grid.Panel', {
            store: store,
            columns: [
                        { text: 'FirstName', dataIndex: 'FirstName', width: 280, sortable: true },
                        { text: 'LastName', dataIndex: 'LastName', sortable: true },
                        { text: 'EmailAddress', dataIndex: 'EmailAddress', width: 150, sortable: true },
                        { text: 'Salary', dataIndex: 'Salary', sortable: true }
                       ],
            renderTo: 'ext-grid'
        });

        store.load();
    });
</script>
</body>
 {
    "d": [
        {
            "__type": "CrystalBall.service+Record",
            "FirstName": "Palash",
            "LastName": "Debnath",
            "EmailAddress": "palash@yahoo.com",
            "Salary": 100
        },
        {
            "__type": "CrystalBall.service+Record",
            "FirstName": "Pritam",
            "LastName": "Debnath",
            "EmailAddress": "pritam@yahoo.com",
            "Salary": 200
        }
    ]
}