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"!
我不知道哪里有错!!请帮我看看!

参考技术A 应该是JSON反序列化时错误,建议检查你的数据,最好贴代码 参考技术B 我也遇到这个问题,怀疑是反序列化的数据过长导致 参考技术C 请把代码拷贝出来,好么?

使用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错误!的主要内容,如果未能解决你的问题,请参考以下文章

webserive学习记录6-页面请求webservice

从 ajax 调用 webservice asmx 返回 404 错误

suds调用webserive时出现suds.TypeNotFound错误

springboot 整合 cxf 发布webservice与调用

webserive学习记录4-获取天气的例子

Ajax POST 到 WCF Rest CORS 兼容的 WebService 引发错误 405