由于公司需要开发一个手机页面,想提供给同事直接在手机上可以查询SAP资料。数据需要使用js调用webserver来获取。
因为初次使用Jquery调用Webserver,所以期间并不顺利。测试调用Webserver在本机成功,但传到服务器就不能调用成功,后面才知道原来是不支持跨域访问。花了几天的时间才解决该问题。下面记录一下跨域调用的核心方法。
本域调用方法:
<script type="text/javascript"> window.onload = function () { //var data = '{"name":"test"}'; var options = { namespace: 'http://tempuri.org/', method: 'HelloWorld', contentType: 'application/json; charset=utf-8', dataType: 'json', data: data, success: function (msg) { alert(msg);} }; webservice('http://localhost/mobile/webs/demo.asmx', options); }; </script>
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、跨域调用方法:
<script type="text/javascript">
var dataStr = "name="+s_name+"&id="+s_id $.ajax ({ type:"get", url:"http://itcolin.com/mobile/ demo.asmx/get_name", dataType: "jsonp", jsonp: 'jsoncallback', data:dataStr, /*直接弹窗提示调用结果*/ success: function (json) {alert(JSON.stringify(json));}, /*如果调用不成功,输出错误提示*/ error: function (x, e) { alert("Error:" + x.responseText");} });
</script>
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();
}
}