首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

ajaxpro类对象未定义异常,再解决不了就放弃ajax了

2011-12-13 
ajaxpro类对象未定义错误,再解决不了就放弃ajax了web.confighttpHandlersaddverb POST,GET path a

ajaxpro类对象未定义错误,再解决不了就放弃ajax了
web.config
        <httpHandlers>
            <add   verb= "POST,GET "   path= "ajaxpro/*.ashx "   type= "AjaxPro.AjaxHandlerFactory,   AjaxPro "   />
        </httpHandlers>

namespace   Tajax
{
public   class   messagesAjax   :   System.Web.UI.Page
{
[AjaxPro.AjaxMethod]
public   string   getNewMessages(int   lx,int   memeberID)
{
}
}
}

namespace   SchoolOA
{
private   void   Page_Load(object   sender,   System.EventArgs   e)
{
//   在此处放置用户代码以初始化页面
AjaxPro.Utility.RegisterTypeForAjax(typeof(messagesAjax));
}
}


<script   language= "javascript ">

var   strMess=Tajax.messagesAjax.getPopMessages(1,2).value;
</script>

错误提示Tajax未定义,


[解决办法]
在IIS6中 将文件类型.ashx添加到 iis可以输出的类型中
[解决办法]
楼主有没有搞错,你调用的方法是:
Tajax.messagesAjax.getPopMessages(1,2)

而你的声明的服务器端方法是:
[AjaxPro.AjaxMethod]
public string getNewMessages(int lx,int memeberID)

哪来的getPopMessages方法让你调用呢?
[解决办法]
AjaxPro.Utility.RegisterTypeForAjax(typeof(messagesAjax));改成AjaxPro.Utility.RegisterTypeForAjax(this.GetType());
var strMess=Tajax.messagesAjax.getPopMessages(1,2).value;改成
var strMess= <%=this.GetType());%> .getPopMessages(1,2).value;
[解决办法]
能把具体的错误信息贴出来吗?比如那个类对象未定义,如果提示AjaxPro类对象未定义,事实上这个类是在core.ashx中定义的。

试试是否使用http://域名/ajaxpro/core.ashx访问,

然后在出错页面上右键查看源代码

检查是否有类似如下脚本注册
<script type= "text/javascript " src= "/ajaxpro/core.ashx "> </script>

如果没有,说明你代码页忘了AjaxPro.Utility.RegisterTypeForAjax(typeof(messagesAjax));

如果提示其他类未定义,那么可能是对应的类型未注册,请检查注册类型AjaxPro.Utility.RegisterTypeForAjax
[解决办法]
var strMess= <%=this.GetType());%> .getPopMessages(1,2).value;

是错误的,this.GetType不能正确获取到的。它将来的值是ASP.页面类型,这样就导致了错误。


正确答案:
如果你的ajax方法放到页面后台,假设这个页面名字是abc.aspx

那么
abc.aspx.cs
// page_load
AjaxPro.Utility.RegisterTypeForAjax(typeof(abc));// 注意页面的类型:public partial class abc与这里是对应的。

// 方法定义
[AjaxPro.AjaxMethod]
public string getPopMessages(int lx,int memeberID)

js:
var strMess = abc.getPopMessages(1,2).value;
[解决办法]
.ashx文件在磁盘上是看不到的,它会经过httpHandlers处理,不是以文件方式访问的。
[解决办法]
对于带有命名空间的,那么

abc.aspx.cs
// page_load
AjaxPro.Utility.RegisterTypeForAjax(typeof(Tajax.类名));// 注意命名空间和类名与这里是对应的。


js:
var strMess = Tajax.类名.getPopMessages(1,2).value;
[解决办法]
如果想知道ajaxpro注册的客户端代理的js引用,可以看以下代码

Type type = typeof(aaa);
string assemblyName = type.FullName + ", " + type.Assembly.FullName.Substring(0, type.Assembly.FullName.IndexOf( ", "));

if (type.Assembly.FullName.StartsWith( "App_Code. "))


assemblyName = type.FullName + ",App_Code ";

string link = " <script type=\ "text/javascript\ " src=\ "/ajaxpro/ " + assemblyName + ".ashx\ "> </script> ";

其中的assemblyName就是js的路径,而typeof(类名).FullName是你需要的那个方法的前缀。

也就是 <%=typeof(类名).FullName%> .getPopMessages(1,2).value;

当然实际中不用这么写,直接写 命名空间.类.方法

[解决办法]
partial是2005的一个概念,你是在用vs2003在开发,可能有一点点不同


----->
js
var strMess = SchoolOA.leftFrame.getPopMessages(1,2).value;


[解决办法]
应该是Web.config配置的原因,

请检查web.config:
<httpHandlers>
<add verb= "* " path= "*.ashx " type= "AjaxPro.AjaxHandlerFactory,AjaxPro.2 "/>
</httpHandlers>

同时项目是否引用AjaxPro.2.dll,同时确保bin下面AjaxPro.2.dll的存在

由于我没有装2003,所以没办法帮您测试。
[解决办法]
ajaxpro.dll传上去了吗?
[解决办法]
在服务器上打开iis,-》右键默认站点-》属性-》配置-》.ashx-》c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll

检查一下,再不行就帮不了你了
[解决办法]
看看这个文件夹下面 C:\Documents and Settings\你的windows帐户名\Local Settings\Temporary Internet Files 有没有生成 prototype.ashx core.ashx
[解决办法]
就是看看 这些脚本有没有 写到你本地去;既然是本机没错,服务器有错,那一定是服务器的设置了;
共享一下 我前两天的一段经历: 给服务器配置shtml 两个服务器都可以,有一台死活不行,查了很久 能试的方法都试了,还是不行。。。。后来无意中发现。那台服务器上不知道什么时候加了一个过滤器。。。把shtml拦截了。。晕啊

所以,还是看看服务器的设置吧

热点排行