是JsonP与Opera,Chrome&苹果浏览器?

时间:2009-12-10 20:57:33

标签: jquery cross-browser cross-domain jsonp

在我正在建设的网站上, 当您登录时(因为数据库位于其他服务器上), 我使用 json padding 来检查用户是否是正确的凭据。

它正在完美无缺(ie7,ie8& FF),直到我在 chrome,safari&歌剧这是一场彻底的灾难。

    $.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&歌剧,从来没有成功的警报。

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

感谢。

2 个答案:

答案 0 :(得分:1)

您是否尝试过使用Safari和Chrome内置的开发人员工具来检查您的请求是否收到了HTTP状态代码为200的回复?

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

你也可以尝试创建没有jQuery的版本来排除那里出现的错误,如果你没有从你的调用中获得状态200我认为jQuery将失败而不调用任何错误函数,使用JSONP与jQuery的文档不是关于错误处理非常简洁。

创建一个包含以下内容的已修改版本的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>

答案 1 :(得分:0)

问题留在html页面标题上,在“Thickbox”(jQuery Thickbox插件)中进行了ajax调用!

在这种情况下,Firefox或IE不介意重复的标题,但WebKit引擎会这样做!

我只需删除多余的标题,一切都回到了正轨。

谢谢大家!