今天尝试了一下agicAjax,碰上了一些奇怪问题,经过反复尝试,总算解决。
问题是这样的,先从官方网站下载MagicAjax for .Net1.1 release 0.3.0 版,在本机解压,导入vs2003,写一个简单的例子,访问本机的web,没有任何问题。
但是当把程序拷贝到服务器上后,问题出现了,ajax表现异常,似乎总是在初始状态和最后状态之间变化,也就是,好像程序无法保存中间状态。
打开MagicAjax 的 Trace功能,截取到的Trace信息如下
Ajax Call invoked at 11:30:07 |
然后查看本机的Trace
Ajax Call invoked at 11:39:32 Page Store Mode: NoStore Form Data sent to server (383 characters): ------------------------------ __EVENTTARGET=ddl __EVENTARGUMENT= __AJAXCALL=true __CONTROL_FINGERPRINTS_AjaxPanel1=C11EB92C;ddl#7EBA2C8E;txt#C13D366C __MAGICAJAX_SCRIPT_FINGERPRINTS=9F6D981;F24DF458;1A6D8953;C44C875E __VIEWSTATE=dDwyNzExNjc2MDg7dDw7bDxpPDE%2bOz47bDx0PDtsPGk8MT47PjtsPHQ8O2w8aTwxPjs%2bO2w8dDx0PDs7bDxpPDA%2bOz4%2bOzs%2bOz4%2bOz4%2bOz4%2bOz5kNKUTA5tOdWeESfkt7VquRxuIpA%3d%3d ddl=你是????? txt=我是XXXXX ------------------------------ Waiting response from server..... Server responsed at 11:39:32 Javascript code received from server (231 characters): ------------------------------ AJAXCbo.SetField("txt","你是?????"); AJAXCbo.SetField("__VIEWSTATE","dDwyNzExNjc2MDg7dDw7bDxpPDE+Oz47bDx0PDtsPGk8MT47PjtsPHQ8O2w8aTwxPjs+O2w8dDx0PDs7bDxpPDE+Oz4+Ozs+Oz4+Oz4+Oz4+Oz6ZjNOz98QT9U5wHt4K2BaaKhD92g=="); 'AJAX_LOADING_OK'; ------------------------------ |
问题出来了,正常的情况下,最后会有一个 AJAXCbo.SetField("__VIEWSTATE", "......")操作,而在有问题的服务器上,是没有的,而且,从返回的代码量来看,也比正常的要少很多,从上面2个Trace结果来看,正常的返回了 383 characters,而有问题的只返回了 54 characters,看来是少了返回的 VIEWSTATE,导致 ajax运行异常。
但是为什么会出现这样的情况,百思不得其解,期间还另外找了几台服务器,但是问题是一样的,难道就我的机器可以运行? 应该不是!
最后,想到是不是因为机器补丁打的不一致导致了这个问题,一查添加删除程序,发现了我的本机比服务器多打了一个Microsoft .Net Framework 1.1 Hotfix (KB886903) 的补丁。
这好办,到ms网站down下来,安装,恩?提示需要先安装 .net 1.1 sp1,原来还有这个东西没装,没问题,再down一个sp1,安装……再测试,一切ok,原来是它捣的鬼。
在网上搜了一下,好像没发现这个问题,到MagicAjax的论坛上看了一下,似乎也没人碰到这个问题,因此把它记录下来,希望对大家有所帮助。
ps 在.Net 2.0上没有发现同样的问题,看来只限于.Net 1.1。