如何用Extjs Ajax来调用WCF服务呢?首先请看http://erichauser.net/2007/11/02/wcf-35-json-and-extjs/。

主要有两步: 

1:              Ext.lib.Ajax.defaultPostHeader = 'application/json'; 
2:		Ext.Ajax.request({
                  url: '...',
                  method: 'POST',
                  params: Ext.util.JSON.encode(...),
              	}); 
第一步设置全局变量Ext.lib.Ajax.defaultPostHeader,第二步设置params: Ext.util.JSON.encode({...})。这在直接调用Ajax是可行的,但是如果在Store中也这么写就会出错
如:
		new Ext.data.GroupingStore({
			proxy: new Ext.data.HttpProxy({
				method: 'POST',							
				url: '..'							
				, params: Ext.util.JSON.encode( { ... } )
			})													
		}).load( );
为什么呢?原来Store中用Proxy而不是直接使用Ajax,params不正确,看文档Store还有一个baseParams的Config Option,试了也不行,再看文档load方法还可以传参数,试了还不行!
没办法了,跟踪源文件。终于发现了原因:load()->execute()->var params = Ext.apply({}, options.params, this.baseParams);就是这句话,导致params最终是一个object对象,而Ext.util.JSON.encode({...})返回的是一个string对象。
那怎么办呢,总不能改源文件吧?继续调试,这回就要看Ajax到底是怎么工作的,这就需要ext-base-debug.js文件了。调试到Ext.lib.Ajax.request()方法
,这是惊奇的发现有jsonData, headers这样两个Config Option,马上找文档,可是没有找到?难道是忘了写?那就先改吧:
Ext.Ajax.request({ 
	 url: '...'
	,
       method: "POST" 
	, jsonData: Ext.util.JSON.encode( { month: '2009/9/1' } ) 
});
注意把params改为jsonData,然后不需要Ext.lib.Ajax.defaultPostHeader = 'application/json'; 运行可以,照样子修改Stroe
		new Ext.data.GroupingStore({
			proxy: new Ext.data.HttpProxy({
				method: 'POST',							
				url: '..'							
				, jsonData: Ext.util.JSON.encode( { ... } )
			})													
		}).load( );
也行了。原来Extjs Ajax 还可以这样写,神奇了。
所以说还是要看原代码的!
posted on 2009-11-05 17:36  沈啣结  阅读(934)  评论(0)    收藏  举报