日期:2014-05-20  浏览次数:20424 次

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. "))