最近写了一个webservice接口,不知道是webservice一直用于CS端开发还是咋滴,TMD,用于AJAX请求遇到了各种问题。
首先就是webservice的跨域问题,起初并不知道原来ajax的url的请求还分是在项目内还是http请求(这好像就是跨域的问题),这个跨域问题需要前端与后端同时协作。
.NET的webservice的跨域配置问题:
跨域配置一共有两个,如果只有第一个,你会遇到,直接在浏览器输入服务地址能返回数据,但是通过ajax请求就是没有结果,而且直接进入错误代码,让人很是恶心的问题,这个问题曾经整到了晚上11点。
<webServices>
<protocols>
<add name="HttpPost"/>
<add name="HttpGet"/>
<add name="HttpSoap"/>
<add name="Documentation"/>
</protocols>
</webServices>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Methods" value="OPTIONS,POST,GET"/>
<add name="Access-Control-Allow-Headers" value="x-requested-with,content-type"/>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
跨域的ajax请求的问题,这个问题主要集中在返回值这块,如果不是取response.d你会发现你返回的是一堆没用的xml格式的文件,直接找也找不着数据具体在哪
$.ajax({
type: "get",
url:"http://116.62.116.110:8099/HeNanWebService.asmx/GetModelsInfoByType",
jsonp: 'jsoncallback',
data: "modetype=环境容量&ObjId=1085",
dataType: "text",
success: function (result) {
//返回结果
alert(result);
},
});
.NET 的webservice传参调用也是个坑啊!!!!
最后附上webservice的接口示例
[WebMethod]
public string GetShapeByRiverObjId(string objid)
{
string myConn = ConfigurationManager.AppSettings["Connection_string"].ToString();
DBFunctions dbHelper = new DBFunctions();
StringBuilder strSql = new StringBuilder();
strSql.Append("select st_astext(shape) as shape from space_shuiti_lunkuo where objid="+ objid + "");
DataSet ds = dbHelper.ExecuteQuery(myConn, CommandType.Text, strSql.ToString(), null);
XmlDocument doc = new XmlDocument();
doc.LoadXml(ds.GetXml());
string strJson = Newtonsoft.Json.JsonConvert.SerializeXmlNode(doc);
return strJson;
}