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

asp.net中jQuery调用webService的有关问题

2012-08-08 
asp.net中jQuery调用webService的问题就是一个登录验证数据正确性功能,首先我在点击登录的时候执行了下面

asp.net中jQuery调用webService的问题
就是一个登录验证数据正确性功能,首先我在点击登录的时候执行了下面的JS

JScript code
function Redirect(Admin_Id,Admin_PassWord,CheckCode)//参数依次是用户名、密码、验证码{    var options=    {        type:"POST",        data:"{Admin_Id:'"+Admin_Id+"',Admin_PassWord:'"+Admin_PassWord+"',CheckCode:'"+CheckCode+"'}",         url:"/AllWebService.asmx/CheckLoginInfo",        contentType:"application/json;charset=utf-8",        dataType:"json",        success:function(result)                {                    if(result=="CheckCodeError")                    {                        alert("验证码输入错误,请检查!");                    }                    else if(result=="AdminError")                    {                        alert("用户名或密码输入错误,请检查!")                    }                    else                    {                        window.location.href="Main.aspx?a="+result;                    }                }    };    $.ajax(options);}


然后我添加了一个AllWebService.asmx,并在App_Code中的AllWebService.cs文件中写了这个方法

C# code
using System;using System.Web;using System.Collections;using System.Web.Services;using System.Web.Services.Protocols;using System.Web.Script.Services;using BLL;using Model;using System.Data;using Common;using System.Runtime.Serialization;using System.Runtime.Serialization.Formatters.Binary;using System.IO;using System.Text;/// <summary>/// AllWebService 的摘要说明/// </summary>[WebService(Namespace = "http://tempuri.org/")][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)][ScriptService]public class AllWebService : System.Web.Services.WebService{    public AllWebService()    {        //如果使用设计的组件,请取消注释以下行         //InitializeComponent();     }    /// <summary>    /// 判断用户名密码验证码是否正确    /// </summary>    /// <param name="Admin_Id">用户名</param>    /// <param name="Admin_PassWord">密码</param>    /// <param name="CheckCode">验证码</param>    /// <returns>CheckCodeError:验证码错误;AdminError:用户名或密码错误;其他:正确的用户名</returns>    [WebMethod(EnableSession = true)]    public static string CheckLoginInfo(string Admin_Id, string Admin_PassWord, string CheckCode)    {        string result = "Right";                if (String.Compare(HttpContext.Current.Session["CheckCode"].ToString(), CheckCode, true) != 0)        {            result = "CheckCodeError";        }        else        {            Admin admin = new Admin();            admin.Admin_Id = Admin_Id;            admin.Admin_PassWord = Admin_PassWord;            BLL_Admin bll_admin = new BLL_Admin();            result = bll_admin.CheckAdmin(admin);        }        return result;    }}


问题是:无论我怎么点击登录按钮都不会进到CheckLoginInfo方法里面来
但是:我把CheckLoginInfo方法挪到Login.cs中,并在调用的时候写这个路径url:"Login.aspx/CheckLoginInfo",
这时候调用成功,请问大家怎么回事,我感觉既然写在本页没问题,那么总的来说我的方法是没问题,可能就是使用.asmx的时候有些东西没有配置好。希望大家指教。


难道是路径写错了吗?网站结构如下:

我用过url:"/AllWebService.asmx/CheckLoginInfo",url:"../AllWebService.asmx/CheckLoginInfo",
都没反应...

写的详细点,希望大家指教,最近发贴问的太多了,分不够了,只能给这么点了,各位不要介意

[解决办法]
你参考一下我写的
C# code
$(document).ready(function () {            var l_para = "";            var params = '{str:"' + l_para + '"}';  //此处参数名要注意和后台方法参数名要一致                              $.ajax({                type: "POST",                   //提交方式                   url: "yclcbmx.aspx/bindLeft",   //提交的页面/方法名                   data: params,                   //参数(如果没有参数:null)                   dataType: "text",               //类型                   contentType: "application/json; charset=utf-8",                beforeSend: function (XMLHttpRequest) {                    //$('#shortcut_body').text("正在查询...");                },                success: function (msg) {                    $(eval("(" + msg + ")").d).appendTo("#shortcut_body");        //将返回来的项添加到下拉菜单中                   },                error: function (xhr, msg, e) {                    alert("error");                }            });        }); public static string bindLeft(string str)   //方法是静态的      {        oracleHelp oraHelp = new oracleHelp();        string flag = "";        StringBuilder sb = new StringBuilder();    } 


[解决办法]
意思是说:你浏览器里输入XXX.asmx/看访问下是不是出错没有。
另外,使用我的那段代码看返回的是什么内容

注意POST,GET方法要与代码里面的匹配
[解决办法]
首先你犯了两个错误:
一、ajax调用
1> ajax 调用webservise时 里面的方法是非静态的,不用static
即: [WebMethod(EnableSession = true)]
public string CheckLoginInfo(string Admin_Id, string Admin_PassWord, string CheckCode)
{

return "帐号:"+Admin_Id+",密码:"+Admin_PassWord+",验证码:"+CheckCode;
}
2>ajax 调用自己后台cs方法时,方法必须为pubic且为静态static,上面加[WebMethod]
即:
[WebMethod(EnableSession = true)]
public static string CheckLoginInfo(string Admin_Id, string Admin_PassWord, string CheckCode)
{

return "帐号:" + Admin_Id + ",密码:" + Admin_PassWord + ",验证码:" + CheckCode;
}
二.路径问题
1.你的访问后台是没问题的,路径应为:url:"Login.aspx/CheckLoginInfo",
2.访问webservice时,应对应的是AllWebService.asmx路径,而不是AllWebService.cs的路径,
我对应你的目录,实例正确,路径应为:url: "../AllWebService.asmx/CheckLoginInfo",
三.返回值问题
如楼上所说,要是用json的话,返回值应为alert(result.d);
贴个图片这么麻烦,楼主你自己试试。
你对应把url改成:url: "../AllWebService.asmx/CheckLoginInfo",
webservise方法把static去掉。
绝对成功。

热点排行