JsonP在Opera、Chrome和Safari中是否可用?

3
在我正在构建的网站上,当您登录时(因为数据库在另一台服务器上),我使用JSON padding来检查用户是否具有正确的凭据。 它在IE7、IE8和FF上运行得非常完美,但在Chrome、Safari和Opera上尝试时,它是完全失败的。
    $.ajax({
  type: "GET",
  dataType: "jsonp",
  url: "http://someurl.com",
  data: aRequestData,
  cache: false,
  error: function (XMLHttpRequest, textStatus, errorThrown) {
    // typically only one of textStatus or errorThrown
    // will have info
    alert("Error occured textStatus=" + textStatus + " errorThrown=" + errorThrown);
  },
  success: function(data) {
    alert('success');    
  }
});

这个方法简单易行,并且在浏览器窗口中可以正常工作,但是令我大吃一惊的是,在Chrome、Safari和Opera中都无法正常工作,从未看到成功提示。

有人知道如何解决这个问题吗?

谢谢。


这是一个非常好的问题。+1以抵消。 - Justin Johnson
2个回答

1

你尝试过使用Safari和Chrome内置的开发者工具来检查你的请求是否返回HTTP状态码200吗?

在Chrome中,你可以从“视图”菜单中访问这些工具,选择“资源”选项卡以查看所有请求。我认为在使用Safari时,你需要在某些设置中激活这些工具。 alt text

你也可以尝试创建一个没有jQuery的版本,以排除可能存在的错误。如果你的调用没有返回状态200,那么jQuery将无法调用任何错误函数。关于使用jQuery处理JSONP的文档在错误处理方面并不是非常简明。

创建一个包含以下内容编辑版本的HTML文件,并在浏览器中加载它:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
   <head>
      <title />
      <script type="text/javascript">
         function ws_results(obj) {
             alert(obj);
         }
      </script>
      <script type="text/javascript" src="http://someurl.com?foo=bar&amp;callback=ws_results" />
   </head>
   <body />
</html>

谢谢,我已经找到了解决方案,只是忘记记录答案了。 - Tom

0
问题出在“Thickbox”(jQuery Thickbox插件)中的ajax调用中,留下了多余的HTML页面头部!
Firefox或IE在这种情况下不会介意重复的标题,但是WebKit引擎会!
我只需要删除额外的标题,一切就恢复正常了。
谢谢大家!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接