4

我在使用 Google Chrome (v26.0.1410.64m) 时遇到了这个问题。当我使用 jquery 调用 Twitter 搜索时,出现以下错误:

GET https://search.twitter.com/search.json?q=youtube&rpp=5&result_type=recent&callback=jQuery19101530768966767937_1365645647773&_=1365645647774 403 (Forbidden)

这是我使用的代码:

$.ajax({
   type: "GET",
   url: "https://search.twitter.com/search.json?q=youtube&rpp=5&result_type=recent",
   contentType: "application/json",
   dataType: "jsonp",
   success: function(data) {
       console.log(data);
   }
});

在 Firefox、Internet Explorer、Safari 和 Opera 上,这是有效的。但是在 Chrome 中我有这个禁止的错误。我尝试在我的 .htaccess 中添加以下跨域代码:

Header set Access-Control-Allow-Origin: *
Header set Access-Control-Allow-Credentials: true

什么也没有变。我哪里错了?如果这有帮助,我正在使用 Windows/Apache 上的虚拟域(en.domain.com.local、fr.domain.com.local 等)在开发环境中工作。

谢谢您的帮助。对不起我的英语不好。

4

2 回答 2

0

我最近遇到了这个问题,但我找到了破解/解决方法。

我发现的工作是引入大约 100 毫秒的任意超时。我使用 150 毫秒只是为了确定该 hack 是否有效。

function latestTweet(screenName) {
  var deferred = new $.Deferred();

  // Introduce a timeout before we make a search request to Twitter.
  // This is added in the event that this function is called when
  // the page is ready and your user is using Chrome. When in Chrome
  // and a search request is sent to Twitter it will always return a 403.
  setTimeout(function () {
    $.ajax({
      url: "//search.twitter.com/search.json?q=from%3A"+screenName,
      type: 'GET',
      dataType: 'jsonp',
      success: function(data) {
        if (data && data.results) {
          data = data.results;
          if (typeof data.length === 'number') {
            deferred.resolve(data[0]);
          } else {
            deferred.reject();
          }
        }
      }
    });
  }, 150); // This works with 100ms, but pad just to be sure.

  return deferred.promise();
}

// Somewhere in my code ...
latestTweet('someScreenName').done(displayTweet);

现在在 Chrome 中你不应该得到 403 Forbidden 响应,并且在所有其他浏览器中它会继续工作。

于 2013-04-12T16:02:05.603 回答
0

好吧,我发现出了什么问题。当我将https替换为http时,Google Chrome 已接受该查询。我猜这是一个安全问题。目前,我的网站无法使用 https 协议。谢谢 !

编辑:嗯......误报。它工作过一次。但是当我刷新页面时,禁止的错误又回来了。

编辑 2:哇...事实上,当 Google Chrome 的开发者控制台关闭时,脚本运行良好...我与Perception制作的小提琴有相同的结果

于 2013-04-11T02:37:28.043 回答