【问题标题】:problem with javascript callbackjavascript回调的问题
【发布时间】:2011-04-11 20:37:39
【问题描述】:

所以这是我的代码:

$.getJSON("http:\/\/tinygeocoder.com\/create-api.php?g=" + lat + "," + lng + "&callback=?", function(data) {
      alert(data);};

它在 chrome 和 safari 中运行良好...但在移动 safari 中失败。这是我得到的错误:

http://tinygeocoder.com/create-api.php?g=39.67997936,-104.(removed for space)&callback=jsonp1302553994489
SyntaxError: Parse error

有人有什么想法吗?

【问题讨论】:

  • 这一切(对我来说很奇怪)是否需要转义(\/\/)?
  • 您使用的是什么版本的 jQuery?要进行测试,请将其放在 JS 中的某个位置:alert(jQuery.fn.jquery);
  • 无论有没有转义,我都会遇到同样的错误。
  • 我使用的是 google 托管的 1.4.2
  • @Mr.失望:不,它根本不需要。 / 字符不需要在字符串中转义。

标签: jquery ios api mobile geolocation


【解决方案1】:

当我尝试浏览该 URL 时,我会收到以下响应:

Bummer, we've had too many queries and one of our data sources has decided not to work. Please <a href="mailto:info@tinygeocoder.com">let us know</a>.

由于这不是 JSON,它会导致您的解析错误。

【讨论】:

  • 再试一次。它们有时会超载,并且会弹出此错误。我偶尔会在 chrome 中得到它。既然我把它放在stackoverflow上,可能会抨击他们......
  • +1 打败我 :) @jtmkrueger 我也相信这是你的问题 - 将 $.getJSON() 更改为 $.get() 可以消除 Mobile Safari 中的错误,因为你不再坚持响应是 JSON 并强制 jQuery 解析它。不幸的是,tinygeocoder 以 200 OK 而不是错误条件返回此错误。
  • 我哭了,然后给他们发了电子邮件。这就是我发现错误含义的方式。
  • @no.good.at.coding,您能告诉我您更改了代码以在移动 safari 中获得响应吗?如果我只使用 .get() 我会收到 Access-Control-Allow-Origin 错误...
  • @jtmkrueger 抱歉,应该澄清一下 - 是的,你会通过跨域请求得到它。我使用的是本地 JSON 文件。试试看 - 如果您创建了无效的 JSON 响应并使用 $.getJSON() - Mobile Safari 会抱怨。但是,如果使用$.get() 获取相同的 JSON 响应,则不会出现错误。我并不是建议您使用 $.get 而不是 $.getJSON() - 我只是想验证根本问题确实是响应不是 JSON,而预期的响应不是 JSON,这是导致错误的原因。跨度>
【解决方案2】:

您的 latlng 变量中可能包含一些 URL 敏感字符。你可以尝试在那些上面使用encodeURIComponent()

【讨论】:

  • 这并没有改变任何埃里克。
猜你喜欢
  • 2012-08-04
  • 1970-01-01
  • 1970-01-01
  • 2013-05-15
  • 2016-02-10
  • 2013-12-27
  • 2012-08-26
  • 2011-07-07
  • 2011-01-29
相关资源
最近更新 更多