我最初使用下面的函数'g.initWithUserGeolocation'成功运行。它是一个JQuery .get(),它调用一个应该返回JSON对象的http处理程序,然后将该对象的Latitude和Longitude属性分配给其他几个属性
var GMAPS = function (mapHeight, serviceMethodName) {
var g = {}
//center location
g.currentLat = 0;
g.currentLng = 0;
g.initWithUserGeolocation = function () {
var url = "http://www.lesmills.dev/sites/main/classlocator/handler/UserLocation.ashx";
$.get(url, {}, function (data) {
g.currentLat = data.Latitude;
g.currentLng = data.Longitude;
});
setTimeout(function () { map.init(); }, 1000);
}
g.init = function () {
var self = this;
//Check if coordinates have been set
if (this.currentLat == 0 || this.currentLng == 0) {
this.initWithUserGeolocation();
//setTimeout(function () { map.init(); }, 1000);
}
当我使用Visual Studio调试http处理程序时,在JQuery .get()调用它时,它会根据用户的IP成功获取用户的位置,并将封装此信息的JSON写入响应,像这样:
context.Response.ContentType = "application/json";
var user = new CurrentUser();
user.Location = MyService.GetLocation(ipAddress));
var result = Util.ToJson(user.Location);
context.Response.Write(result);
返回的此对象包含用户位置的正确经度和纬度。但是,使用Firebug,当我在上面的JQuery .get()的'success'回调函数中放置一个断点时,就行了
g.currentLat = data.Latitude;
,没有命中断点,好像.get()没有成功。稍后在g.init函数中,this.currentLat和this.currentLng都为零。
正如我所说,这是以前的工作。代码没有改变。但是,以前,JQuery代码和处理程序代码基于部署到主机名为www.lesmills.dev的站点的同一个Visual Studio项目,并且使用相对URL从JQuery .get()调用该处理程序。现在,我已将JQuery代码移动到具有主机名m.lesmills.dev的站点,并使用绝对URL调用处理程序,该URL位于www.lesmills.dev网站中的原始位置。为什么JQuery代码没有从http处理程序接收正确的坐标?
答案 0 :(得分:0)
当我查看Firebug的“NET”选项卡并向ashx处理程序查询请求时,我看到GET成功(响应代码200),但“NET”选项卡中显示的“响应”是空白。所以基本上我可以请求不同的子域,但是响应不会返回给我。当我将处理程序移动到同一个子域时,我得到了一个成功的JSON响应。接下来的问题(由MikeSmithDev指出)详细介绍了JQuery .get()的跨域(包括跨子域)限制,它本质上是一个AJAX / JSON请求。