AJAX调用WebService错误!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AJAX调用WebService错误!相关的知识,希望对你有一定的参考价值。
我现在有一个实体类叫User,它的编号的类型是Guid,在我通过AJAX调用一个WebService的方法:GetUserById(string userid),我传的参数是 用户的编号,但是是string类型,我在业务类里才对编号进行转换为GUID类型,这个都不是重要的,但是,当我用AJAX请求时,返回的应该是USER对象,但是我通过Fiddler检查到相应:
"Message":"无效的 JSON 基元: 7570eb90-e376-4901-98a6-64e6ad2584f9。","StackTrace":" 在 System.Web.Script.Serialization.javascriptObjectDeserializer.DeserializePrimitiveObject()\r\n 在 System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\r\n 在 System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)\r\n 在 System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\r\n 在 System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)\r\n 在 System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)\r\n 在 System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)\r\n 在 System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer)\r\n 在 System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)\r\n 在 System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.ArgumentException"!
我不知道哪里有错!!请帮我看看!
使用ajax和urlconnection方式调用webservice服务
<html> <head> <title>使用ajax方式调用webservice服务</title> <script> var xhr = new XMLHttpRequest(); function sendAjax(){ var url = "http://192.168.13.66:8080/hello";//webservice服务的地址 var requestBody = ‘<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" ‘ + ‘xmlns:q0="http://service.demo.cn/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ‘ + ‘xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">‘+ ‘<soapenv:Body><q0:sayHi> <arg0>xiaoming</arg0></q0:sayHi></soapenv:Body></soapenv:Envelope>‘;//构造请求体,符合soap协议规范 //打开连接 xhr.open("POST",url,true); //重新设置请求头 xhr.setRequestHeader("content-type","text/xml;charset=UTF-8"); //指定回调函数 xhr.onreadystatechange = _back; //发送请求 xhr.send(requestBody); } //定义回调函数 function _back(){ if(xhr.readyState == 4){ if(xhr.status == 200){ //获取服务器的响应数据 var ret = xhr.responseXML; var ele = ret.getElementsByTagName("return")[0]; alert(ele.textContent); } } } </script> </head> <body> <input type="button" value="使用ajax方式调用webservice服务" onclick="sendAjax();"> </body> </html>
requestBody 请求体,可以通过myeclipse自带插件,点击go以后,下边的请求体就是我们想要的格式。
二,使用urlconnection方式
package cn.demo.client.urlconnection; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; /** * 使用urlconnection方式调用webservice服务 * @author zhaoqx * */ public class App { public static void main(String[] args) throws Exception { URL wsUrl = new URL("http://192.168.13.66:8080/hello"); HttpURLConnection conn = (HttpURLConnection) wsUrl.openConnection(); //构造请求体 String requestBody = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" " + "xmlns:q0=\"http://service.demo.cn/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" "+ "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">"+ "<soapenv:Body><q0:sayHi><arg0>xiaoming</arg0></q0:sayHi></soapenv:Body></soapenv:Envelope>"; //设置请求的参数 conn.setDoInput(true); conn.setDoOutput(true); conn.setRequestMethod("POST"); conn.setRequestProperty("content-type", "text/xml;charset=UTF-8"); //向服务端写数据 conn.getOutputStream().write(requestBody.getBytes()); int responseCode = conn.getResponseCode(); if(responseCode == 200){ //使用输入流获取服务端响应数据 InputStream in = conn.getInputStream(); byte[] b = new byte[1024]; int len = 0; StringBuffer sb = new StringBuffer(); while((len = in.read(b)) != -1){ String s = new String(b, 0, len,"UTF-8"); sb.append(s); } System.out.println(sb.toString()); in.close(); } } }
以上是关于AJAX调用WebService错误!的主要内容,如果未能解决你的问题,请参考以下文章
从 ajax 调用 webservice asmx 返回 404 错误
suds调用webserive时出现suds.TypeNotFound错误