2

我正在尝试构建一个简单的检查,该检查将接受一个字符串并检查该字符串是否存在 twitter 帐户。

我已经成功地获得了积极的结果,但我似乎无法获得消极的结果。$.ajax()有一个错误元素,但它没有触发。

工作示例

代码:

var testTwit = function(username){
    $.ajax({
      url: 'http://twitter.com/statuses/user_timeline.json?screen_name='+username+'&count=1&callback=?',
      dataType: 'json',
      success: function(){
          alert("username is valid");
      }, 
     error: function(){
         alert("username is valid");
     }
   })
 }

​</p>

4

4 回答 4

3

您正在使用 JSONP 传输。在这种传输中,所请求的 URL 只是作为<script>标记添加到文档中。如果 URL 返回非 200 状态代码,浏览器将不会执行它:这就是您看不到否定响应的原因。

一种解决方案是使用suppress_response_codes参数,以便 API 始终返回 200 状态码。

查看每个 Twitter 开发人员应该知道的事情

  • suppress_response_codes:如果存在此参数,则所有响应都将返回 200 OK 状态码 - 甚至是错误。此参数的存在是为了适应在拦截所有非 200 响应的浏览器中运行的 Flash 和 JavaScript 应用程序。如果使用,那么客户端的工作就是通过解析响应正文来确定错误状态。请谨慎使用,因为这些错误消息可能会发生变化。

顺便说一句,Twitter 正在禁止未经身份验证的 API 访问,因此 JSONP 访问也可能被禁止。

于 2012-09-04T10:13:55.997 回答
0

通常 API 总是在收到请求时返回响应。这就是为什么没有给出错误。您应该解析来自 API 的响应以查明用户是否存在。

于 2012-09-04T10:13:29.897 回答
0

使用 JSONP 请求时不会触发错误。在jQuery 论坛上阅读更多内容。

于 2012-09-04T10:14:35.913 回答
0

只是arnaud576875答案的总结:

  1. 添加suppress_response_codes=1参数
  2. 检查ID退货

所以,结果将是这样的:

var testTwit = function(username){
    $.ajax({
       url: 'http://twitter.com/statuses/user_timeline.json?suppress_response_codes=1&screen_name='+username+'&count=1&callback=?',
       dataType: 'json',
       success: function(d){
         if (d && d.id)    
            $('span').html('username is valid!');
         else
            $('span').html('username is not valid.');
       }
    });
}
于 2012-09-04T12:31:34.753 回答