【发布时间】:2013-11-20 03:14:48
【问题描述】:
我最初让下面名为“g.initWithUserGeolocation”的函数成功运行。这是一个 JQuery .get(),它调用一个应该返回 JSON 对象的 http 处理程序,然后将该对象的纬度和经度属性分配给其他几个属性
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 的站点中,并且正在使用指向其在 www.lesmills.dev 网站中原始位置的绝对 URL 调用处理程序。为什么 JQuery 代码没有从 http 处理程序接收到正确的坐标?
【问题讨论】:
-
不能跨域使用 AJAX/JSON... 需要 JSONP。 This will probably help
标签: jquery asp.net httphandler