0

我有一个 JSONP 响应的本地版本保存为文件,因此当我没有 Internet 连接时,我可以从本地文件系统测试我的单页 Web 应用程序。

当我直接从<script>标签加载它时它工作正常,但当我尝试使用 jQuery$.ajax()函数加载它时却不行。(是的,我也从本地文件系统成功加载了 jQuery。)

我认为可能是 jQuery总是向 URL添加一个callback参数,当 JSONP 来自静态命名的文件而不是来自 Internet 时,这没有意义。

我尝试将jsonpCallbackset 传递给null或传递给空 string '',但这没有区别。

还有其他奇怪的地方:

  • 当我将完整路径作为 URL 传递时,它在 jQuery 中运行良好,但在我使用相对 URL 时失败,即使在直接使用<script>标签时两者都同样有效。
  • 当它失败时,谷歌浏览器的开发者工具网络标签告诉我方法是OPTIONS而不是GET!使用绝对 URL 或<script>带有相对或绝对 URL 的标记方法告诉我该方法GET符合预期。

这是已知的正确行为吗?已知的不正确行为?

jQuery 或 Google Chrome 有什么奇怪的地方吗?(我在 Windows 7 32 位 Chrome 版本 21 中运行。)

4

1 回答 1

0

虽然这可能无法解决我的所有问题,但它回答了问题标题中提出的具体问题:

这似乎是我所缺少的:

带有不附加“回调”参数的 jQuery 的 JSONP 请求?

jQuery.ajax()接受一个settings对象参数。其中一项设置称为jsonp. 从文档中

从 jQuery 1.5开始,设置jsonp选项以false防止 jQuery 将“?callback”字符串添加到 URL 或尝试使用“=?” 为转型。在这种情况下,您还应该明确设置jsonpCallback设置。例如,{ jsonp: false, jsonpCallback: "callbackName" }

我的代码现在可以在 Windows 7(32 位)下使用 Chrome (21)、Firefox (13)、Internet Explorer (9)、Opera (12) 和 Safari (5) 的当前版本。

于 2012-08-11T07:41:35.153 回答