您的位置:首页 > Web前端 > JQuery

jquery Ajax跨域调用WebServices方法

2015-09-14 17:06 766 查看
由于公司需要开发一个手机页面,想提供给同事直接在手机上可以查询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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: