<jQuery ajax调用webservice注意事项
您的当前位置:首页正文

jQuery ajax调用webservice注意事项

2023-12-08 来源:六三科技网

jquery ajax调用webservice(C#)要注意的几个事项:

1、web.config里需要配置2个地方

<httpHandlers> <remove verb="*" path="*.asmx"/> <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> </httpHandlers>

在<system.web></system.web>之间加入

<webServices> <protocols> <add name="HttpPost" /> <add name="HttpGet" /> </protocols> </webServices>

2.正确地编写webserivce的代码

/// <summary> /// UserValidate 的摘要说明 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 [System.Web.Script.Services.ScriptService] public class UserValidate : System.Web.Services.WebService { DFHon.Content.Common.rootPublic rp = new DFHon.Content.Common.rootPublic(); [WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public string ValidateUserLogState() { string result = ""; HttpCookie cookie = HttpContext.Current.Request.Cookies["DHFonMenberInfo"]; if (cookie != null) { string username = System.Web.HttpUtility.UrlDecode(cookie["MenberName"]); int ipoint = 0; int gpoint = 0; try { DataTable dt = UserBll.ExecuteUserAllInfo(username); if (dt.Rows.Count > 0) { ipoint = int.Parse(dt.Rows[0]["iPoint"].ToString()); gpoint = int.Parse(dt.Rows[0]["gPoint"].ToString()); } } catch { } result = "{'user':{'id':'" + cookie["UserId"] + "','name':'" + username + "','message':'" + rp.getUserMsg(DFHon.Global.CurrentCookie.UserName) + "','ipoint':'" + ipoint.ToString() + "','gpoint':'" + gpoint.ToString() + "'}}"; } else { result = "{'user':{'id':'0','name':'','message':'0','ipoint':'0','gpoint':'0'}}"; } return result; } [WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public string UserLogin(string userName, string userPwd) { string returnVal = ""; try { GlobalUserInfo info; DFHon.Content.UserLogin _UserLogin = new DFHon.Content.UserLogin(); EnumLoginState state = _UserLogin.PersonLogin(HttpUtility.UrlDecode(userName), userPwd, out info); if (state == EnumLoginState.Succeed) { DFHon.Global.CurrentCookie.Set(info); DFHon.API.PDO.DiscuzNT.PassportLogin.UserLogin(Server.UrlDecode(userName), userPwd, -1); int ipoint = 0; int gpoint = 0; DataTable dt = UserBll.ExecuteUserAllInfo(userName); if (dt.Rows.Count > 0) { ipoint = int.Parse(dt.Rows[0]["iPoint"].ToString()); gpoint = int.Parse(dt.Rows[0]["gPoint"].ToString()); } returnVal = "{'user':{'id':'" + info.UserId.ToString() + "','name':'" + info.UserName + "','message':'" + rp.getUserMsg(userName) + "','ipoint':'" + ipoint.ToString() + "','gpoint':'" + gpoint.ToString() + "'}}"; } else { int ids = 0;//状态:-2用户被锁定 -1用户名密码错误 switch (state) { case EnumLoginState.Err_Locked: ids = -2; break; case EnumLoginState.Err_UserNameOrPwdError: ids = -1; break; default: break; } returnVal = "{'user':{'id':'" + ids + "','name':'','message':'0','ipoint':'0','gpoint':'0'}}"; } } catch { returnVal = "{'user':{'id':'0','name':'','message':'0','ipoint':'0','gpoint':'0'}}"; } return returnVal; } [WebMethod] public string UserLogout() { if (HttpContext.Current.Request.Cookies["DHFonMenberInfo"] != null) { HttpCookie cookie = new HttpCookie("DHFonMenberInfo"); cookie.Expires = System.DateTime.Now.AddDays(-1); cookie.Domain = DFHon.Config.BaseConfig.getV("weblogin"); HttpContext.Current.Response.AppendCookie(cookie); } return "1"; } DFHon.Content.user UserBll = new DFHon.Content.user(); [WebMethod] public string ValidateUserEmail(string email) { string result = "0";//返回的结果 -2邮箱为空 -1邮箱格式不正确 0邮箱存在 1填写正确 if (string.IsNullOrEmpty(email)) { result = "-2";//邮箱为空 } else if (!IsValidEmail(email)) { result = "-1";//邮箱格式不正确 } else if (UserBll.sel_useremail(email) > 0) { result = "0";//邮箱存在 } else { result = "1";//可以注册 } return result; } [WebMethod] public string ValidateUserName(string username) { string result = "0";//返回值:-1用户名长度为2-16;0用户名存在;1可以注册 if (username == "" || username == null || username.Length < 2 || username.Length > 16) { result = "-1"; } else if (UserBll.sel_username(username) != 0) { result = "0"; } else { result = "1"; } return result; } public bool IsValidEmail(string strIn) { // Return true if strIn is in valid e-mail format. return System.Text.RegularExpressions.Regex.IsMatch(strIn, @"^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$"); } }

WebService

<script> $(function() { $("#userloging").show(); //登录框处理开始 //加载登录状态 $.ajax({ type: "POST", //访问WebService使用Post方式请求 contentType: "application/json;charset=utf-8", //WebService 会返回Json类型 url: "/API/Service/UserValidate.asmx/ValidateUserLogState", //调用WebService data: "{}", //Email参数 dataType: 'json', beforeSend: function(x) { x.setRequestHeader("Content-Type", "application/json; charset=utf-8"); }, error: function(x, e) { }, success: function(response) { //回调函数,result,返回值 $("#userloging").hide(); var json = eval('(' + response.d + ')'); var userid = json.user.id; if (userid > 0) { $("#spanusername").html(json.user.name); $("#spanmessagenum").html(json.user.message); $("#userloginsucced").show(); $("#userloginbox").hide(); } } }); //登录 $("#userlogbutton").click(function() { var username = $("#username").val(); var userpwd = $("#userpassword").val(); if (username != "" && userpwd != "") { $("#userloging").show(); $.ajax({ type: "POST", //访问WebService使用Post方式请求 contentType: "application/json;charset=utf-8", //WebService 会返回Json类型 url: "/API/Service/UserValidate.asmx/UserLogin", //调用WebService data: "{userName:'" + username + "',userPwd:'" + userpwd + "'}", //Email参数 dataType: 'json', beforeSend: function(x) { x.setRequestHeader("Content-Type", "application/json; charset=utf-8"); }, error: function(x, e) { }, success: function(result) { //回调函数,result,返回值 $("#userloging").hide(); var json = eval('(' + result.d + ')'); var userid = json.user.id; if (userid > 0) { $("#spanusername").html(json.user.name); $("#spanmessagenum").html(json.user.message); $("#userloginsucced").show(); $("#userloginbox").hide(); } else { switch (userid) { case -2: alert("用户被锁定!请30分钟后再登录!"); $("#username").focus(); break; case -1: alert("用户名或密码错误!请核对您的用户名和密码!"); $("#userpassword").focus(); break; default: alert("登录失败!请核对您的用户名和密码之后重试!"); $("#userpassword").focus(); break; } } } }); } else if (username == "") { alert("用户名不能为空!"); $("#username").focus(); } else if (userpwd == "") { alert("密码不能为空!"); $("#userpassword").focus(); } }); //退出 $("#logout").click(function() { $("#userloging").show(); $.ajax({ type: "POST", //访问WebService使用Post方式请求 contentType: "application/json;utf-8", //WebService 会返回Json类型 url: "/API/Service/UserValidate.asmx/UserLogout", //调用WebService data: "{}", //Email参数 dataType: 'json', beforeSend: function(x) { x.setRequestHeader("Content-Type", "application/json; charset=utf-8"); }, success: function(result) { //回调函数,result,返回值 $("#userloging").hide(); if (result.d > 0) { $("#userloginsucced").hide(); $("#userloginbox").show(); } } }); }); //登录框处理结束 }); </script>

小编还为您整理了以下内容,可能对您也有帮助:

怎样使用ajax调用restful webservice

这里放出一些调用的例子:

1.get请求获得Category xml 数据。

$("#btncall").click(function (){

$.ajax({

url:"/restblog/services/category",

type:"GET",

dataType:'xml',

success :function (data){

var tablehtml="<table class='tableresult' border='1' bordercolor='#ccc'><tr><th>编号</th><th>名称</th></tr>";

$("category",data).each(function (i,category){

var id=$("id",category).text();

var name=$("name",category).text();

tablehtml+=("<tr><td>"+id+"</td><td>"+name+"</td></tr>");

});

tablehtml+="</table>";

$(tablehtml).appendTo("#result");

},error:function (){

alert("get category list failed!");

}});

});

jquery的ajax调用有一个参数dataType是期望得到的数据格式,目前版本的可选值为xml,json,html,jsonp.默认的是html。指定了该属性,jquery会自动解析数据格式。

上面的例子接受到的数据形如:

<?xml version="1.0" encoding="UTF-8"?>

<Categories>

<category>

<id>1</id>

<name>第一个分类</name>

</category>

<category>

<id>2</id>

<name>第二个分类</name>

</category>

</Categories>

data是一个xml对象,在没有jquery的情况下解析xml是一件很麻烦的事情。但是使用jquery,xml解析起来和html一样。

$("category",data)是查找标签名(tagName)为category节点,返回jquery对象。注意获得节点值用的是text()方法。

还得注意的地方就是url 这里的路径和请求jsp的规则是一样。

2.发送json的例子。

$("#btnAddbyjson").click(function (){

$.ajax({

url:"/restblog/services/category/add",

type:"PUT",

data:"{\"id\":1,\"name\":\"category1\"}",

contentType:'application/json',

success :function (result){

alert(result);

},error:function (){

alert("add category failed!");

}});

});

注意type: 通常的ajax调用都只是GET POST 这里用的是PUT,要回过神来。

contentType:与服务方法上的Consume 标注属性一样。在ajax调用的时候会在请求的Header添加{"contentType","application/json"}的键/值标明发送的数据格式是json。

即便发送的数据格式是json,但是真正的数据是以字符串的形式在网络传输的,所以data属性只是json的字符串,由服务器端解析成Category对象。这里的json字符串格式比较严格,不能适用单引号' ,这里要注意。

data属性即可以是字符串又可以是json,jquery会根据contentType解析成需要发送的格式。

下面的截图是在FireBug下看到的数据发送情况:

这张图旨在说明发送的数据不是一个键/值类型。区别与下面的例子。

3.POST的表单提交。

$("#btnAdd").click(function (){

$.ajax({

url:"/restblog/services/category/addbyname",

type:"POST",

data:{'categoryname':$("#txtName").val()},

success :function (result){

alert(result);

},error:function (){

alert("add category failed!");

}});

});

addbyname方法的categoryname标识为@FormParam 所以用POST提交的数据被当做Form提交的数据。下面的截图说明浏览器发送的是一个标准的键/值数据

4.调用带@Context标识参数的方法

$("#btncommonProcess").click(function (){

$.ajax({

url:"/restblog/services/category/commonProcess",

type:"GET",

data:"a=b&a=e&c=d",

success :function (result){

alert(result);

},error:function (){

alert("commonProcess failed!");

}});

});

服务端的代码见上一篇文章。

控制台上打印:

c : [d]

a : [b, e]

jquery ajax 调用webservice 带参数时出错,弄了几天还没好,帮忙解决一下

$.ajax({

type: "post",

contentType: "application/json",

url: "../WebRequest/S_aaa.asmx/helloword",

data: "{code:'"+Code+"'}",

dataType: "json",

success: function(result) {

alert(result.d);

},

error: function(event, XMLHttpRequest, ajaxOptions, thrownError) {

}

});

这两个参数你自己不会看吗?

data: "{code:'"+Code+"'}",

dataType: "json",

js调用webservice服务问题

:1. 首先你要确定下是不是字符串长度的问题,把获取的值长度减少,看看还报不报错,不报错就证明是长度问题,反之另想解决办法.
2. 如果是长度的问题,而且你是从js端调用的web service的话,唯一的办法就只能用:<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="500000">
</jsonSerialization>
</webServices>
</scripting>
</system.web.extensions>这样的配置节的方法了
3. 另外就是你看看能不能设置下在服务端JavaScriptSerializer.MaxJsonLength属性
4. 如果你的配置节发生错误,你需要对比下你的web.config文件和标准的asp.net ajax的配置文件有什么不同。没办法,这个web.config太娇嫩了,有点毛病就跑步起来。你可以新建一个ajax的项目,对比下这个项目下的配置和你的配置又什么不同
5. 确保你正确引用System.Web.Extensions.dll 这个文件

js调用webservice服务问题

:1. 首先你要确定下是不是字符串长度的问题,把获取的值长度减少,看看还报不报错,不报错就证明是长度问题,反之另想解决办法.
2. 如果是长度的问题,而且你是从js端调用的web service的话,唯一的办法就只能用:<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="500000">
</jsonSerialization>
</webServices>
</scripting>
</system.web.extensions>这样的配置节的方法了
3. 另外就是你看看能不能设置下在服务端JavaScriptSerializer.MaxJsonLength属性
4. 如果你的配置节发生错误,你需要对比下你的web.config文件和标准的asp.net ajax的配置文件有什么不同。没办法,这个web.config太娇嫩了,有点毛病就跑步起来。你可以新建一个ajax的项目,对比下这个项目下的配置和你的配置又什么不同
5. 确保你正确引用System.Web.Extensions.dll 这个文件

怎样使用ajax调用restful webservice

先把webservice 添加到你的工程里面,然后

$.ajax({ type: "POST",

url: "WebService.asmx/ConvertYHOO",

data: "",

contentType: "application/json; charset=utf-8",

dataType: "json",

beforeSend: function () {

},

success: function (data) {

},

error: function (jqXHR, exception) {

}

});

关于JQUERY AJAX调用WEB服务出现的诡异异常。

你最好事先判断一下 str的值,可以打印看看,是否正确追问str值正确,手动复值和取值相同

关于JQUERY AJAX调用WEB服务出现的诡异异常。

你最好事先判断一下 str的值,可以打印看看,是否正确追问str值正确,手动复值和取值相同

jquery调用后台方法?

1.新建demo.aspx页面。
2.首先在该页面的后台文件demos.aspx.cs中添加引用。
using System.Web.Services;
3.无参数的方法调用.
大家注意了,这个版本不能低于.net framework 2.0。2.0已下不支持的。
后台代码:[WebMethod]
public static string SayHello()
{
return "Hello Ajax!";
} JS代码:

$(function() {
$("#btnOK").click(function() {
$.ajax({
//要用post方式
type: "Post",
//方法所在页面和方法名
url: "Demo.aspx/SayHello",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data) {
//返回的数据用data.d获取内容
alert(data.d);
},
error: function(err) {
alert(err);
}
});

//禁用按钮的提交
return false;
});
});

页面代码:
<form id="form1" runat="server">
<div>
<asp:Button ID="btnOK" runat="server" Text="验证用户" />
</div>
</form>
3.有参数方法调用
后台代码:[WebMethod]
public static string GetStr(string str, string str2)
{
return str + str2;
} JS代码:

$(function() {
$("#btnOK").click(function() {
$.ajax({
type: "Post",
url: "demo.aspx/GetStr",
//方法传参的写法一定要对,str为形参的名字,str2为第二个形参的名字
data: "{'str':'我是','str2':'XXX'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data) {
//返回的数据用data.d获取内容
alert(data.d);
},
error: function(err) {
alert(err);
}
});

//禁用按钮的提交
return false;
});
});

jquery调用后台方法?

1.新建demo.aspx页面。
2.首先在该页面的后台文件demos.aspx.cs中添加引用。
using System.Web.Services;
3.无参数的方法调用.
大家注意了,这个版本不能低于.net framework 2.0。2.0已下不支持的。
后台代码:[WebMethod]
public static string SayHello()
{
return "Hello Ajax!";
} JS代码:

$(function() {
$("#btnOK").click(function() {
$.ajax({
//要用post方式
type: "Post",
//方法所在页面和方法名
url: "Demo.aspx/SayHello",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data) {
//返回的数据用data.d获取内容
alert(data.d);
},
error: function(err) {
alert(err);
}
});

//禁用按钮的提交
return false;
});
});

页面代码:
<form id="form1" runat="server">
<div>
<asp:Button ID="btnOK" runat="server" Text="验证用户" />
</div>
</form>
3.有参数方法调用
后台代码:[WebMethod]
public static string GetStr(string str, string str2)
{
return str + str2;
} JS代码:

$(function() {
$("#btnOK").click(function() {
$.ajax({
type: "Post",
url: "demo.aspx/GetStr",
//方法传参的写法一定要对,str为形参的名字,str2为第二个形参的名字
data: "{'str':'我是','str2':'XXX'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data) {
//返回的数据用data.d获取内容
alert(data.d);
},
error: function(err) {
alert(err);
}
});

//禁用按钮的提交
return false;
});
});

jquery ajax 访问webservice 报错:500 Internal Server Error

如果是ajax调用asp.net写的webservice出这个错误的话,哪必须修改web.config

网上的例子大多抄的,基本没有说到问题,但有一篇文章有代码,可以正确运行:

http://www.cnblogs.com/finehappy/archive/2009/02/01/1382123.html

下面是修改的方法

在<system.web>中加入以下代码:

<httpHandlers>

<remove verb="*" path="*.asmx"/>

<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

</httpHandlers>

如果出现:HTTP 错误 500.23 - Internal Server Error

须加入:

<system.webServer>

<validation validateIntegratedModeConfiguration="false" />

</system.webServer>

大概就没有问题了

结果是返回

d{"Hello World "}

这样的数据结构,这个d是不知原因的出现,一般的用ashx返回是没有这个的。所以是json格式的话,还要把d的内容转为json的对象,javascript如下:var bj = eval('(' + result.d + ')');

怎样使用ajax调用restful webservice

我先创建一个pojo

Java代码

@XmlRootElement

public class Category {

private int id;

private String name;

//....

}

Java代码

@XmlRootElement

public class Category {

private int id;

private String name;

//....

}

然后创建restful webservice resource类

Java代码

@PUT

@Path("add")

@Proces("text/html")

@Consumes( { "application/xml", "application/json" })

public String addCategory(Category category) {

System.out.println("处理添加类别逻辑,接受的数据为id:"+category.getId()+",name:"+category.getName());

return "ok";

}

Java代码

@PUT

@Path("add")

@Proces("text/html")

@Consumes( { "application/xml", "application/json" })

public String addCategory(Category category) {

System.out.println("处理添加类别逻辑,接受的数据为id:"+category.getId()+",name:"+category.getName());

return "ok";

}

测试通过

六三科技网还为您提供以下相关内容希望对您有帮助:

怎样使用ajax调用restful webservice

注意type: 通常的ajax调用都只是GET POST 这里用的是PUT,要回过神来。contentType:与服务方法上的Consume 标注属性一样。在ajax调用的时候会在请求的Header添加{"contentType","application/json"}的键/值标明发送的数据格...

jquery ajax 调用webservice 带参数时出错,弄了几天还没好,帮忙解决一...

url: "../WebRequest/S_aaa.asmx/helloword",data: "{code:'"+Code+"'}",dataType: "json",success: function(result) { alert(result.d);},error: function(event, XMLHttpRequest, ajaxOptions, thrownError) ...

怎样使用ajax调用restful webservice

先把webservice 添加到你的工程里面,然后 .ajax({ type: "POST",url: "WebService.asmx/ConvertYHOO",data: "",contentType: "application/json; charset=utf-8",dataType: "json",beforeSend: function () { },...

jquery ajax 访问webservice 报错:500 Internal Server Error_百度...

如果是ajax调用asp.net写的webservice出这个错误的话,哪必须修改web.config 网上的例子大多抄的,基本没有说到问题,但有一篇文章有代码,可以正确运行:http://www.cnblogs.com/finehappy/archive/2009/02/01/1382123....

ASP.NET 3.5核心编程之AJAX Web Service的调用

为创建 AJAX Web服务,第一步是要建立标准的 Web服务项目,随后导入System.Web.Script.Services命名空间:using System.Web.Script.Services;namespace Core35.WebService{[WebService(Namespace="[WebServiceBinding(ConformsTo=WsiProfiles....

用ajax调用带参数的WebService时,怎么传递参数。。。求一个具体例子_百...

.ajax({ type:"GET", // 传递方式 dataType: "json", // 数据类型 url: "/admin/reading.php?do=doing", // 传递地址 data:{orderSn:orderSn,why:why}, // 传递参数 success:function(res) // 传递...

jquery调用后台方法?

1.新建demo.aspx页面。2.首先在该页面的后台文件demos.aspx.cs中添加引用。using System.Web.Services;3.无参数的方法调用.大家注意了,这个版本不能低于.net framework 2.0。2.0已下不支持的。后台代码:[WebMethod]pub...

如何在客户端直接调用WebService中的方法

1.Web.config中需要配置好运行ASP.NET AJAX框架相应的配置项,当然,建立一个ASP.NET AJAX Enabled Web Site项目时,Web.config已经配置好了。2.想让某个WebService可以被JS调用,需要做一下几步:I.在这个WebService文件...

我把公司网站代码在服务器上拖到本地运行,在浏览器打开是空白页面?怎 ...

前端的CallWebServiceByJsonp方法采用jQuery的ajax方法调用后端的Web服务GetSingleInfo方法,后台的GetSingleInfo方法,使用前端的回调方法OnGetMemberSuccessByjsonp包装后台的业务操作的JSON对象,返回给前端一段javascript片段执行。

asp.net webservice如何获取jquery ajax post请求的参数

是否可以设置一个参数,例如 val,参数值为json值,在webservice里获取val的json值,转换json值为Dictionary数组,再对Dictionary数组进行访问

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

Top