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未定义,
<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未定义,
.ashx,.asmx扩展都加了,程序文件夹的权限也设了,就是不好使;服务器是我自己的,本机是window200,不知道windows2003有什么特殊注意的地方
怎样把将文件类型.ashx添加到 iis可以输出的类型中
请指教
Tajax.messagesAjax.getPopMessages(1,2)而你的声明的服务器端方法是:
[AjaxPro.AjaxMethod]
public string getNewMessages(int lx,int memeberID)哪来的getPopMessages方法让你调用呢?
var strMess=Tajax.messagesAjax.getPopMessages(1,2).value;改成
var strMess=<%=this.GetType());%>.getPopMessages(1,2).value;
<script type="text/javascript" src="/ajaxpro/core.ashx"></script>如果没有,说明你代码页忘了AjaxPro.Utility.RegisterTypeForAjax(typeof(messagesAjax));如果提示其他类未定义,那么可能是对应的类型未注册,请检查注册类型AjaxPro.Utility.RegisterTypeForAjax
照你说的改了,js 是var strMess=ASP.leftFrame_aspx.getPopMessages(1,1).value;
在本机运行正常,到服务器上报“ASP”未定义
本机程序运行后通过http://localhost/ajaxpro/prototype.ashx这几个.ashx文件都能访问到;但到服务器上就访问不到了;手动把本级生成的.ashx文件传到服务器也不行服务器上没有生成.ashx文件,
但<script type="text/javascript" src="/ajaxpro/core.ashx"></script>这些代码生成了,说明ajaxpor.dll文件起作用了,但为什么没有生成.ashx文件不明白
我发的就是实际的代码,仅是函数名写错了和getPopMessages(,){}函数的具体代码没贴出了,因为在本机好用,所以不会是getPopMessages函数内部代码出错了
正确答案:
如果你的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;
Tajax是名称空间,提示的是它未定义;把Tajax改称SchoolOA调用处的名称空间,就提示“SchoolOA”未定义
// page_load
AjaxPro.Utility.RegisterTypeForAjax(typeof(Tajax.类名));// 注意命名空间和类名与这里是对应的。
js:
var strMess = Tajax.类名.getPopMessages(1,2).value;
照你的方法做了,
我的文件是leftFrame.aspx.cs
AjaxPro.Utility.RegisterTypeForAjax(typeof(leftFrame));
页面类型是这样的
namespace SchoolOA
{
/// <summary>
/// leftFrame 的摘要说明。
/// </summary>
public class leftFrame : System.Web.UI.Page
{
……
"partial"是什么意思js
var strMess = leftFrame.getPopMessages(1,2).value;
本机就包错了,leftFrame未定义
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;当然实际中不用这么写,直接写 命名空间.类.方法
js
var strMess = SchoolOA.leftFrame.getPopMessages(1,2).value;
AjaxPro.Utility.RegisterTypeForAjax(typeof(SchoolOA.leftFrame));
var strMess = SchoolOA.leftFrame.getPopMessages(1,2).value;
加了命名空间,本机测试正常;到服务器上又提示“SchoolOA”未定义,又报命名空间未定义服务器上,通过http:/……/ajaxpro/prototype.ashx,访问不到3个.ashx,证明ajaxpro.dll没有生成这3个文件,是不是这儿出了错,是哪儿没配好吗?
我用的是vs2003
看运行时的leftFrame.aspx文件的原文件<script type="text/javascript" src="/ajaxpro/core.ashx"></script>这些代码生成了,说明ajaxpor.dll文件起作用了
<httpHandlers>
<add verb="*" path="*.ashx" type="AjaxPro.AjaxHandlerFactory,AjaxPro.2"/>
</httpHandlers>同时项目是否引用AjaxPro.2.dll,同时确保bin下面AjaxPro.2.dll的存在由于我没有装2003,所以没办法帮您测试。
好的,一定好好拜读一下你的blog,
可是我现在这个问题还没解决呢,郁闷中;
今天解决不了我就只能放弃ajax了,项目不等人啊,Truly,你有别的好的建议吗,实现无刷新更新页面
我用的是dotnetframework 1.1版本,用的ajaxpro.dll
web.config
<httpHandlers>
<add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro" />
</httpHandlers>
bin目录下ajaxpro.dll文件存在
你的服务器是什么环境,我的是windows2003,本机是windows2000,到服务器上就对象未定义,实在不行我就把服务器系统重做,不过太麻烦了重做服务器;应该还是服务器配置的问题,就是不知道问题出在哪,我们从服务器配置的角度多思考一下,集思广益
.ashx .asmx 应用程序扩展原先就加了,ajaxpro.dll不知道还操作什么
C:\Documents and Settings下没有我建立的帐户名,是不是问题出在这了
共享一下 我前两天的一段经历: 给服务器配置shtml 两个服务器都可以,有一台死活不行,查了很久 能试的方法都试了,还是不行。后来无意中发现。那台服务器上不知道什么时候加了一个过滤器把shtml拦截了。。晕啊所以,还是看看服务器的设置吧
我在本机访问服务器上的程序,察看本级Temporary Internet Files 生成 prototype.ashx core.ashx,说明服务器上生成了这几个.ashx文件,但http://服务器地址/ajaxpro/prototype.ashx问什么不能访问到,请指教
:我本機這個目錄下有prototype-core.ashx、core.js沒有prototype.ashx、core.ashx
請問qizi82() ,如何處理
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="MyDemo._Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>未命名頁面</title>
<script type="text/javascript">
MyDemo._Default.GetMessageOfTheDay(GetMessageOfTheDay_CallBack);
function GetMessageOfTheDay_CallBack(response)
{
alert(response.value);
}
</script>
</head>
<body>
<form id="form1" runat="server">
</form>
</body>
</html>
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
namespace MyDemo
{ public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//注册我们感兴趣的包含服务器端函数
//的类
Ajax.Utility.RegisterTypeForAjax(typeof(MyDemo._Default)); }
[Ajax.AjaxMethod()]
public string GetMessageOfTheDay()
{
return "Experience is the mother of wisdom";
}
}
}
<add verb="POST,GET" path="ajax/*.ashx" type="Ajax.PageHandlerFactory, Ajax"/>
</httpHandlers>另,bin下有ajax.dll,並已引用,其它的好象沒設那里了。我的環境是win2003+vs2005.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
<head><title>
未命名頁面
</title>
<script type="text/javascript">
MyDemo._Default.GetMessageOfTheDay(GetMessageOfTheDay_CallBack);
function GetMessageOfTheDay_CallBack(response)
{
alert(response.value);
}
</script>
</head>
<body>
<form name="form1" method="post" action="Default.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGTXq9cgn9J89hYqlxJY5/t0c+gUWg==" />
</div>
</form>
</body>
</html><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
<head><title>
未命名頁面
</title>
<script type="text/javascript">
MyDemo._Default.GetMessageOfTheDay(GetMessageOfTheDay_CallBack);
function GetMessageOfTheDay_CallBack(response)
{
alert(response.value);
}
</script>
</head>
<body>
<form name="form1" method="post" action="Default.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGTXq9cgn9J89hYqlxJY5/t0c+gUWg==" />
</div>
</form>
</body>
</html>
這是生成的html代碼
AjaxPro.Utility.RegisterTypeForAjax(typeof(类名));
查原因查了两天了,兜了一圈,发现楼主ajaxpro类对象未定义错误,通过配置服务器(IIS)可以解决。此方法本人试了,可以解决,只可惜我的错误不止是这个问题,现在又出现返回NULL的问题,郁闷!ajaxpro类对象未定义错误解决方案: (摘自http://topic.csdn.net/u/20070710/16/ef1b3685-6326-45cd-b6fd-696863335802.html)
本地测试成功的代码传到虚拟空间出现这样的错误!不要去修改任何程序
首先打开IIS配置--》主目录--》选择配置(权限配置)--》这里则有扩展的权限配置,添加浏览 c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll
扩展名为 .ashx
动作:限制为 GET,HEAD,POST,DEBUG
然后最后一个选项 :去掉确认文件是否存在这个选项