由于公司需要开发一个手机页面,想提供给同事直接在手机上可以查询SAP资料。数据需要使用js调用webserver来获取。
因为初次使用Jquery调用Webserver,所以期间并不顺利。测试调用Webserver在本机成功,但传到服务器就不能调用成功,后面才知道原来是不支持跨域访问。花了几天的时间才解决该问题。下面记录一下跨域调用的核心方法。
本域调用方法:
Webservers代码:
<%@ WebService Language="C#" Class="WebServiceDemo" %>using System;using System.Web;using System.Web.Services;using System.Web.Services.Protocols;[WebService(Namespace = "http://www.guru4.net/", Description = "Webservice dimostrativo per JavaScript SOAP Client")]public class WebServiceDemo : WebService{[WebMethod(Description = "Hello World!")]public string HelloWorld(){ return "Hello World!";}}
以上方法仅适用于同域访问。
跨域调用:
1、调用jquery文件:
<script type="text/javascript" src="js/jquery.js"></script>
2、跨域调用方法:
Webservices注意事项:
为确保jquery能正常调用,WebServices输出方式请参考以下。(类型为void)
<%@ WebService Language="C#" Class="WebServiceDemo" %>using System;using System.Web;using System.Web.Services;using System.Web.Services.Protocols;[WebService(Namespace = "http://www.guru4.net/", Description = "Webservice dimostrativo per JavaScript SOAP Client")]public class WebServiceDemo : WebService{ [WebMethod] public void get_str() { string rtnstr = "{name:'test','id':'001'}"; System.Web.HttpContext.Current.Response.ContentType = "application/json;charset=utf-8"; string jsonCallBackFunName = string.Empty; jsonCallBackFunName = HttpContext.Current.Request.Params["jsoncallback"].ToString(); System.Web.HttpContext.Current.Response.Write(jsonCallBackFunName + "(" + rtnstr +")"); System.Web.HttpContext.Current.Response.End(); }}