使用jQuery的JSONP请求没有追加“回调”参数?

时间:2012-08-10 15:57:03

标签: google-chrome jquery jsonp http-get script-tag

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

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

我认为可能是jQuery 总是在URL中添加了callback参数,当JSONP来自静态命名文件而不是来自互联网。

我尝试将jsonpCallback设置为null或空字符'',但没有区别。

还有其他奇怪之处:<​​/ p>

  • 当我将完整路径作为URL传递时,jQuery可以正常工作,但是当我使用相对URL时失败,即使直接使用<script>标记时两者都能正常工作。
  • 如果失败,Google Chrome的开发人员工具网络标签会告诉我该方法为OPTIONS而不是GET!使用绝对网址或带有相对或绝对网址的<script>代码方法告诉我该方法符合预期GET

这是一个已知的正确行为吗?一个已知的错误行为?

jQuery或Google Chrome有些奇怪吗? (我在Windows 7 32位,Chrome 21版中运行。)

1 个答案:

答案 0 :(得分:0)

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

这似乎是我所缺少的:

使用jQuery的JSONP请求没有附加“回调”参数?

jQuery.ajax()获取settings个对象参数。其中一个设置称为jsonpFrom the documentation

  

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

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