extjs 调用 webservice 的问题

chessman_mak 2010-01-19 02:14:29
我想利用ExtJS来调用WebService来做一个GridPanel.


我的WebService是



using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using BLL;

namespace ExtJs_Demo
{
/// <summary>
/// PttGetData 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
[System.Web.Script.Services.ScriptService]
public class PttGetData : System.Web.Services.WebService
{

CancelAfterVerify cav = new CancelAfterVerify();

[WebMethod]
public List<PttCmd> CancelableTerminal()
{
List<PttCmd> setOfTerminId = new List<PttCmd>(cav.qryCancelableTerminal());
return setOfTerminId;
}
}
}







我的JavaScript语句是




function f() {
Ext.Ajax.request({
url: 'PttGetData.asmx/CancelableTerminal', // Webservice的地址以及方法名
method: 'POST', // poste 方式传递
success: onSuccess

});
}

function onSuccess(request, options) {

var result = Ext.util.JSON.decode(request.responseText);
Ext.Msg.alert('Result', request.responseText);
}




这个JS的写法.如果我从WebService中传一个String类型的值出来就能够正常弹出MSSAGEBOX和内容..但是我现在要从WebService传一个LIST到页面. 这个JS就拿不到了.. 我应该怎样写呢??

我看了ExtJS官网上的例子.. 它是用这样的写法来设置数据源.




Ext.onReady(function() {


//creat the proxy
var proxy = new Ext.data.HttpProxy({url:'../PttGetData.asmx/Helloworld'});
//creat reader
var reader = new Ext.data.JsonReader({},[{name:'Terminal ID',mapping:'TermId'}]);
//data source
var store = new Ext.data.Store({
proxy:proxy,
reader:reader
});
});






大家帮我看看应该怎样改???

谢谢了
...全文
1536 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
C16250 2010-08-17
  • 打赏
  • 举报
回复

请问楼主问题解决了没有啊。。。
chessman_mak 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 binerhh 的回复:]
引用 6 楼 chessman_mak 的回复:
引用 5 楼 zhyzdl 的回复:
study


好阿..


问题解决~


我的webservice改成这样写..


C# codenamespace ExtJs_Demo
{/// <summary>/// PttGetData 的摘要说明/// </summary>    [WebService(Namespace="http://tempuri.org/")]
    [WebServiceBinding(ConformsTo= WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。    [System.Web.Script.Services.ScriptService]publicclass PttGetData : System.Web.Services.WebService
    {

        CancelAfterVerify cav=new CancelAfterVerify();

        [WebMethod]
        [ScriptMethod(ResponseFormat= ResponseFormat.Json,
    UseHttpGet=true, XmlSerializeString=false)]public List <PttCmd> CancelableTerminal()
        {
            List <PttCmd> setOfTerminId=new List <PttCmd>(cav.qryCancelableTerminal());return setOfTerminId;
        }


    }
}


然后我的js改成这样子...

其实我的JS并没有多大的改变..只是把XMLREADER改为JSONSTORE

JScript code


Ext.onReady(function() {var myStore=new Ext.data.JsonStore({// Load data at once        autoLoad:true,// Override default http proxy settings        proxy:new Ext.data.HttpProxy({// Call web service method using GET syntax            url:'PttGetData.asmx/CancelableTerminal',// Ask for Json response            headers: {'Content-type':'application/json' }
        }),// Root variable        root:'d',// Record identifier// Fields declaration        fields: ['TermId']
    });var grid=new Ext.grid.GridPanel({// Set store        store: myStore,// Columns definition        columns: [
        { header:"Terminal ID", width:300, dataIndex:'TermId', sortable:true }
                ],// Render grid to dom element with id set to panel        renderTo:'CAV',
        width:800,
        height:400
    });
    myStore.load();

});



ScriptMethod是什么,我用了后怎么提示错误呢?请帮忙。
[/Quote]


你的scriptMethod是不是没using阿?>?
binerhh 2010-01-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 chessman_mak 的回复:]
引用 5 楼 zhyzdl 的回复:
study


好阿..


问题解决~


我的webservice改成这样写..


C# codenamespace ExtJs_Demo
{///<summary>/// PttGetData 的摘要说明///</summary> [WebService(Namespace="http://tempuri.org/")]
[WebServiceBinding(ConformsTo= WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 [System.Web.Script.Services.ScriptService]publicclass PttGetData : System.Web.Services.WebService
{

CancelAfterVerify cav=new CancelAfterVerify();

[WebMethod]
[ScriptMethod(ResponseFormat= ResponseFormat.Json,
UseHttpGet=true, XmlSerializeString=false)]public List<PttCmd> CancelableTerminal()
{
List<PttCmd> setOfTerminId=new List<PttCmd>(cav.qryCancelableTerminal());return setOfTerminId;
}


}
}


然后我的js改成这样子...

其实我的JS并没有多大的改变..只是把XMLREADER改为JSONSTORE

JScript code


Ext.onReady(function() {var myStore=new Ext.data.JsonStore({// Load data at once autoLoad:true,// Override default http proxy settings proxy:new Ext.data.HttpProxy({// Call web service method using GET syntax url:'PttGetData.asmx/CancelableTerminal',// Ask for Json response headers: {'Content-type':'application/json' }
}),// Root variable root:'d',// Record identifier// Fields declaration fields: ['TermId']
});var grid=new Ext.grid.GridPanel({// Set store store: myStore,// Columns definition columns: [
{ header:"Terminal ID", width:300, dataIndex:'TermId', sortable:true }
],// Render grid to dom element with id set to panel renderTo:'CAV',
width:800,
height:400
});
myStore.load();

});
[/Quote]


ScriptMethod是什么,我用了后怎么提示错误呢?请帮忙。
chessman_mak 2010-01-20
  • 打赏
  • 举报
回复
顶一下
chessman_mak 2010-01-20
  • 打赏
  • 举报
回复
顶!!!!!
chessman_mak 2010-01-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhyzdl 的回复:]
study
[/Quote]

好阿..


问题解决~


我的webservice改成这样写..





namespace ExtJs_Demo
{
/// <summary>
/// PttGetData 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
[System.Web.Script.Services.ScriptService]
public class PttGetData : System.Web.Services.WebService
{

CancelAfterVerify cav = new CancelAfterVerify();

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json,
UseHttpGet = true, XmlSerializeString = false)]

public List<PttCmd> CancelableTerminal()
{
List<PttCmd> setOfTerminId = new List<PttCmd>(cav.qryCancelableTerminal());
return setOfTerminId;
}


}
}






然后我的js改成这样子...

其实我的JS并没有多大的改变..只是把XMLREADER改为JSONSTORE




Ext.onReady(function() {

var myStore = new Ext.data.JsonStore({
// Load data at once
autoLoad: true,
// Override default http proxy settings
proxy: new Ext.data.HttpProxy({
// Call web service method using GET syntax
url: 'PttGetData.asmx/CancelableTerminal',
// Ask for Json response
headers: { 'Content-type': 'application/json' }
}),
// Root variable
root: 'd',
// Record identifier

// Fields declaration
fields: ['TermId']
});

var grid = new Ext.grid.GridPanel({
// Set store
store: myStore,
// Columns definition
columns: [
{ header: "Terminal ID", width: 300, dataIndex: 'TermId', sortable: true }
],
// Render grid to dom element with id set to panel
renderTo: 'CAV',
width: 800,
height: 400
});
myStore.load();

});


zhyzdl 2010-01-19
  • 打赏
  • 举报
回复
study
chessman_mak 2010-01-19
  • 打赏
  • 举报
回复
我单独调试了webservice一下.. 发现它输出的是xml的格式.所以我去掉了[System.Web.Script.Services.ScriptService] 直接从javascript那里用xmlreader来读..不过还是没有内容. 怎么回事呢??

WEBSERVICE输出这样子的XML



<ArrayOfPttCmd>

<PttCmd>
<MsgTime>0001-01-01T00:00:00</MsgTime>
<TermId>GZ0026</TermId>
<MsgWay>0</MsgWay>
<IsSucc>0</IsSucc>
<T_isRec>0</T_isRec>
<T_IsCommit>0</T_IsCommit>
<SendTime>0001-01-01T00:00:00</SendTime>
<RecvTime>0001-01-01T00:00:00</RecvTime>
<CommitTime>0001-01-01T00:00:00</CommitTime>
<StartTime>0001-01-01T00:00:00</StartTime>
<EndTime>0001-01-01T00:00:00</EndTime>
<OperTime>0001-01-01T00:00:00</OperTime>
</PttCmd>

<PttCmd>
<MsgTime>0001-01-01T00:00:00</MsgTime>
<TermId>GZ5566</TermId>
<MsgWay>0</MsgWay>
<IsSucc>0</IsSucc>
<T_isRec>0</T_isRec>
<T_IsCommit>0</T_IsCommit>
<SendTime>0001-01-01T00:00:00</SendTime>
<RecvTime>0001-01-01T00:00:00</RecvTime>
<CommitTime>0001-01-01T00:00:00</CommitTime>
<StartTime>0001-01-01T00:00:00</StartTime>
<EndTime>0001-01-01T00:00:00</EndTime>
<OperTime>0001-01-01T00:00:00</OperTime>
</PttCmd>

<PttCmd>
<MsgTime>0001-01-01T00:00:00</MsgTime>
<TermId>SH1897</TermId>
<MsgWay>0</MsgWay>
<IsSucc>0</IsSucc>
<T_isRec>0</T_isRec>
<T_IsCommit>0</T_IsCommit>
<SendTime>0001-01-01T00:00:00</SendTime>
<RecvTime>0001-01-01T00:00:00</RecvTime>
<CommitTime>0001-01-01T00:00:00</CommitTime>
<StartTime>0001-01-01T00:00:00</StartTime>
<EndTime>0001-01-01T00:00:00</EndTime>
<OperTime>0001-01-01T00:00:00</OperTime>
</PttCmd>
</ArrayOfPttCmd>




我只需要拿到TermId 其它的都不需要..
chessman_mak 2010-01-19
  • 打赏
  • 举报
回复
.... 我有用json阿.. 我的web service那里加了一句[System.Web.Script.Services.ScriptService]

会自动转为JSON吧.~


我改了一下js的写法




Ext.onReady(function() {

var store = new Ext.data.Store({
url: 'PttGetData.asmx/CancelableTerminal',
reader: new Ext.data.XmlReader({
record: 'PttCmd'
},
[{ name: 'TermId', mapping: 'PttCmd->TermId' }
])
});

var grid = new Ext.grid.GridPanel({
store: store,
columns: [
{ header: "Terminal ID", width: 120, dataIndex: 'TermId', sortable: true }
],
renderTo: 'CAV',
width: 540,
height: 200
});

store.load();
});




这样子有点眉目了.. 但是只能读出一个PANEL..不能读出其中的数据..
qq497525725 2010-01-19
  • 打赏
  • 举报
回复
js怎么知道list是什么东东?
用json吧
sohighthesky 2010-01-19
  • 打赏
  • 举报
回复
js怎么知道list是什么东东?
用json吧
基于Extjs的DirectCenter框架源码 DirectCenter主要分为用户管理,部门管理,公司管理三个模块。 DirectCenter: DirectCenter.Model (类库项目)实体类库,其中包括hibernate映射文件(可以把映射文件放到DAL层,这样使Model也比较单纯,而DAL则只是Nhibernate的完整实现) DirectCenter.IDAL (类库项目)数据访问层接口 DirectCenter.DAL (类库项目)数据库访问层实现(采用NHibernate) DirectCenter.IBLL (类库项目)业务层接口 DirectCenter.BLL (类库项目)业务层实现(使用IDAL,通过spring.net的IOC注入实际的数据访问层) DirectCenter.App (类库项目)系统的配置,其中包括Nhibernate,Spring.net的一些配置信息,业务层的DAL注入. DirectCenter.UnitTest (类库项目) 使用nunit对业务层进行单元测试 DirectCenter.DTO (类库项目) data transform object 用于和前台UI层交互的实体。之所以分出来,也是为了考虑不只是为了Web项目,同时包括WebService等其它UI.(可能会有不少人会问已经有Model了,为什么还需要DTO?) DirectCenter.Controllers (类库项目) Web控制器。用户请求和后台业务层的中转,接收并分析用户请求,调用业务层完成请求,再分发给用户。(注意这里调用的是IBLL,是业务逻辑接口,也是通过Spring.Net的IOC注入具体的业务实现)。 DirectCenter.Web (Web Application) 单纯的View层,主要由ExtJs完成界面和Ajax请求。

87,955

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧