js 跨域访问时,必须要加上 callback=? . callback 也可以用其它名子代替。
不过所调用的服务里。反回的 json 结果里必须在前面加上 callback 。和在 js 里定义的一致。
如: bool ok = ms.InputOffSetDateToDB(System.Convert.ToByte(maptype), lng, lat, offset_lng, offset_lat);
string jsons = SerializeJsonString(ok);
string cb = context.Request["callback"];
context.Response.Write(cb + "(" + jsons + ")");
具体访求如下:
var url = "http://123.65.217.16/WcfMapServer/AddOffSetToDb.ashx?maptype=1&lng=" + lastLng + "&lat=" + lastLat + "&offset_lng=" + xoff + "&offset_lat=" + yoff + "&callback=?";
$.getJSON(
url,
{ "spot_id": 4401 },
function (json) {
try {
alert(json.status);
}
catch (e) {
var a = "";
var b = "";
}
}
);
AddOffSetToDb.ashx 里的反回结果的方法。
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
// public bool InputOffSetDateToDB(byte mapType, decimal lng, decimal lat, decimal offset_lng, decimal offset_lat)
try
{
string maptype = (context.Request["maptype"] == null ? "" :
context.Request["maptype"]);
if (string.IsNullOrWhiteSpace(maptype)) return;
decimal lng = (context.Request["lng"] == null ? 0 :
System.Convert.ToDecimal(context.Request["lng"]));
decimal lat = (context.Request["lat"] == null ? 0 :
System.Convert.ToDecimal(context.Request["lat"]));
if (lng == 0 || lat == 0) return;
decimal offset_lng = (context.Request["offset_lng"] == null ? 0 :
System.Convert.ToDecimal(context.Request["offset_lng"]));
decimal offset_lat = (context.Request["offset_lat"] == null ? 0 :
System.Convert.ToDecimal(context.Request["offset_lat"]));
MapServer ms = new MapServer();
bool ok = ms.InputOffSetDateToDB(System.Convert.ToByte(maptype), lng, lat, offset_lng, offset_lat);
string jsons = SerializeJsonString(ok);
string cb = context.Request["callback"];
context.Response.Write(cb + "(" + jsons + ")");
}
catch
{
return;
}
}
public string SerializeJsonString(object obj)
{
MemoryStream ms = new MemoryStream();
DataContractJsonSerializer ser = new DataContractJsonSerializer(obj.GetType());
ser.WriteObject(ms, obj);
byte[] json = ms.ToArray();
ms.Close();
string jsonString = Encoding.UTF8.GetString(json, 0, json.Length);
return jsonString;
}