问题描述
前台functionUoloadData(loginName,fraction,date){$.ajax({type:"Post",url:"Default.aspx/InsertData",data:"{'loginName':'"+loginName+"','fraction':'"+fraction+"','date':'"+date+"'}",datatype:"json",contentType:"application/json;charset=utf-8",success:function(result){alert(result);}});}后台[WebMethod]publicstaticstringInsertData(stringloginName,intfraction,stringdate){try{OLEDataProcessorole=newOLEDataProcessor();ole.ConnectionString="Provider=Microsoft.ACE.OLEDB.12.0;DataSource=|DataDirectory|\Data.accdb;PersistSecurityInfo=True";stringsql="insertintoUploadData(LoginName,Fraction,UploadDate,CreateDate)values('"+loginName+"',"+fraction+",'"+date+"',Now())";intcount=ole.Execute(sql);returncount>0?"0":"1";}catch{return"2";}}为什么老返回当前页面的内容啊?
解决方案
解决方案二:
我新学asp.net,看不懂url:"Default.aspx/InsertData",这是什么
解决方案三:
你都没有输出流,获取到得肯定是页面的内容啊,不是返回的数据就是输出流的哈
解决方案四:
success:function(result){alert(result.d);}
解决方案五:
引用1楼dahongsong的回复:
我新学asp.net,看不懂url:"Default.aspx/InsertData",这是什么ajax要调用的后台代码...
为什么总感觉LZ的AJAX写的那么的纠结呢...LZ所指的"为什么老返回当前页面的内容啊"是不是指的是页面显示的都是些json数据,如果是的话是因为你datatype:"json",contentType:"application/json;charset=utf-8",这里都已经把他定义成json了他返回的显示给你看的就是返回的json数据
解决方案六:
参考下这里哦http://msdn.microsoft.com/en-us/library/bb515101.aspx喵!
解决方案七:
正常地、适当地响应ajax,使用ashx是正好的。如果你使用aspx,不但要额外地处理整个Page对象创建和生成过程,而且还要写代码Response.Clear();
来吧页面内容杀掉,典型地必须杀鸡取卵才能输出那一点数据营养。如果你使用ashx来响应ajax请求,则是非常轻量级地没有巨大的资源浪费。
解决方案八:
引用6楼sp1234的回复:
正常地、适当地响应ajax,使用ashx是正好的。如果你使用aspx,不但要额外地处理整个Page对象创建和生成过程,而且还要写代码C#codeResponse.Clear();来吧页面内容杀掉,典型地必须杀鸡取卵才能输出那一点数据营养。如果你使用ashx来响应ajax请求,则是非常轻量级地没有巨大的资源浪费。
顶SP大哥!!!我这里有段代码范例://登陆操作functionloginSys(username,password){$.ajax({type:"POST",//dataType:"json",//cache:true,url:"DoLogin.ashx?Method=LoginState",data:{username:username,password:password},success:function(msg){if(msg=="S"){alert("登陆成功");window.location.href="Index.aspx";//alert("登陆成功");}if(msg=="F"){alert("用户不存在");}}});}</script>
ashx文件usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Web.SessionState;usingSystem.Reflection;namespaceXQH.EasyUi.Web{///<summary>///DoLogin的摘要说明///</summary>publicclassDoLogin:IHttpHandler,IRequiresSessionState{HttpRequestRequest;HttpResponseResponse;HttpSessionStateSession;HttpServerUtilityServer;HttpCookieCookie;publicvoidProcessRequest(HttpContextcontext){Request=context.Request;Response=context.Response;Session=context.Session;Server=context.Server;stringmethod=Request["Method"].ToString();//对应ajax方法的url参数MethodInfomethodInfo=this.GetType().GetMethod(method);//methodInfo.Invoke(this,null);}///<summary>///登陆///</summary>publicvoidLoginState(){stringusername=Request["username"].ToString();//"admin";stringpassword=Request["password"].ToString();//"123";stringsql="selectcount(ID)from[SysAdmin]whereLoginID='"+username+"'andLoginPWD='"+password+"'";intflag=Convert.ToInt32(App.DAL.SqlHelper.GetScalar(sql));if(flag>0){introleId=1;Cookie=newHttpCookie("RoleInfo");Cookie["roleId"]=roleId.ToString();Cookie.Expires=DateTime.Now.AddMonths(1);Response.Cookies.Add(Cookie);Response.Write("S");//输出流}else{Response.Write("F");//输出流}}publicboolIsReusable{get{returnfalse;}}}}
解决方案九:
学习了,还要使用ashx文件呀!
解决方案十:
用Jquery的ajax貌似没楼主那么复杂吧,它返回的是页面内容,最后要Response.Write,至于用ashx还是aspx就看你自己吧
解决方案十一:
最后用这个返回数据HttpContext.Current.Response.Write("2");HttpContext.Current.Response.End();
解决方案十二:
建議樓主:用一個ashx文件,然後獎業務邏輯來反射,調用。這樣的話,一個ashx文件就搞定了,用取來很好維護的
解决方案十三:
前台functionUoloadData(loginName,fraction,date){$.ajax({type:"Post",url:"Default.aspx/InsertData",data:"{'loginName':'"+loginName+"','fraction':'"+fraction+"','date':'"+date+"'}",datatype:"json",contentType:"application/json;charset=utf-8",success:function(count){alert(count);}});}后台[WebMethod]publicstaticvoidInsertData(stringloginName,intfraction,stringdate){OLEDataProcessorole=newOLEDataProcessor();ole.ConnectionString="Provider=Microsoft.ACE.OLEDB.12.0;DataSource=|DataDirectory|\Data.accdb;PersistSecurityInfo=True";stringsql="insertintoUploadData(LoginName,Fraction,UploadDate,CreateDate)values('"+loginName+"',"+fraction+",'"+date+"',Now())";intcount=ole.Execute(sql);Response.Write(count);}}
解决方案十四:
前台functionUoloadData(loginName,fraction,date){$.ajax({type:"Post",url:"Default.aspx/InsertData",data:"{'loginName':'"+loginName+"','fraction':'"+fraction+"','date':'"+date+"'}",datatype:"json",contentType:"application/json;charset=utf-8",success:function(count){alert(count);}});}后台[WebMethod]publicstaticvoidInsertData(stringloginName,intfraction,stringdate){OLEDataProcessorole=newOLEDataProcessor();ole.ConnectionString="Provider=Microsoft.ACE.OLEDB.12.0;DataSource=|DataDirectory|\Data.accdb;PersistSecurityInfo=True";stringsql="insertintoUploadData(LoginName,Fraction,UploadDate,CreateDate)values('"+loginName+"',"+fraction+",'"+date+"',Now())";intcount=ole.Execute(sql);Response.Write(count);}
解决方案十五:
引用6楼sp1234的回复:
正常地、适当地响应ajax,使用ashx是正好的。如果你使用aspx,不但要额外地处理整个Page对象创建和生成过程,而且还要写代码C#codeResponse.Clear();来吧页面内容杀掉,典型地必须杀鸡取卵才能输出那一点数据营养。如果你使用ashx来响应ajax请求,则是非常轻量级地没有巨大的资源浪费。
学习学习
解决方案:
不好意思,还漏了句前台functionUoloadData(loginName,fraction,date){$.ajax({type:"Post",url:"Default.aspx/InsertData",data:"{'loginName':'"+loginName+"','fraction':'"+fraction+"','date':'"+date+"'}",datatype:"json",contentType:"application/json;charset=utf-8",success:function(count){alert(count);}});}后台[WebMethod]publicstaticvoidInsertData(stringloginName,intfraction,stringdate){OLEDataProcessorole=newOLEDataProcessor();ole.ConnectionString="Provider=Microsoft.ACE.OLEDB.12.0;DataSource=|DataDirectory|\Data.accdb;PersistSecurityInfo=True";stringsql="insertintoUploadData(LoginName,Fraction,UploadDate,CreateDate)values('"+loginName+"',"+fraction+",'"+date+"',Now())";intcount=ole.Execute(sql);Response.Write(count);Response.Write(end());}}
解决方案:
15楼写的很对了,内容有点多,我划下重点。jqueryajax执行aspx.cs里面的方法时有以下几个要点$.ajax({type:"Post",//Post方式必须contentType:"application/json;charset=utf-8",//必须,楼主描述问题所在url:About.aspx/TestAjax,data:"{'id':'100','name':'vincent'}",//传参success:function(data){alert(data.d);}});
解决方案:
在后台代码中,简单写,如下usingSystem.Web.Services;[WebMethod]publicstaticstringTestAjax(stringid,stringname){JavaScriptSerializerserial=newJavaScriptSerializer();stringvalue="helloworld!";returnserial.Serialize(value+id+name);//序列化返回json,前面可以alert出来}在static方法里面是不能使用Response的
解决方案:
后台返回的值Response.write()就可以
解决方案:
ashx正解!
解决方案:
.net2.0不能真接用,.net3.5没问题
解决方案:
还是ashx简单好用
解决方案:
response.write(result);response.end();
解决方案:
使用Response.Write输入想要获取的内容
解决方案:
不懂为什么要用ajax··aspx了用ajax干嘛··
解决方案:
jQuery与ashx相关: