为什么我会收到501 Not Implemented错误?

时间:2010-06-25 21:06:04

标签: ajax json

我正在执行以下AJAX调用:

$(document).ready(function() {

  $.getJSON('https://sendgrid.com/api/user.stats.json',
    {
      'api_user': 'me@mydomain.com',
      'api_key': 'MYAPIKEY',
      'user': 'me@mydomain.com',
      'category': 'MY_CATEGORY'
    },
    function(response){
      alert('received response');
    }
  );

});

我没有按预期得到任何警告信息。相反,Firebug说我得到“501 Not Implemented。”

为什么呢?我需要做些什么来解决这个问题?

如果我转到与Firebug中的AJAX调用相对应的URL,我会下载一个JSON文件,它包含预期的数据。

我注意到的一件事是萤火虫说OPTIONS而不是GET:

alt text http://grab.by/grabs/b1a13d92a4fc69aa310880a5d7a06b95.png

3 个答案:

答案 0 :(得分:2)

我不知道这是否相关,但通常在客户端上请求JSON到不同域中的服务器时,由于Same Origin Policy,您需要使用JSONP而不是JSON。不幸的是,他们的API似乎并不支持使用JSONP - 所以他们必须期望您从服务器与他们的站点进行交互。在这种情况下,您需要在服务器上使用代理方法将调用转换为其API,以便客户端调用与该页面位于同一域中的服务器。

答案 1 :(得分:1)

因为这是" jQuery 501(方法未实施)"当我在同一个域上遇到这个问题时,我想我会分享对我有用的东西(这不是你的问题)。

我的问题是我没有返回有效的JSON,我刚刚返回" 1"。所以要解决这个问题,要么:

  • 确保您返回有效的JSON,或者如果您不需要JSON响应,
  • 交换您的电话以使用$ .ajax而不是$ .getJSON或
  • 如果您已使用& .ajax,请删除类型:" json"

希望能帮助一些人。

答案 2 :(得分:0)

我遇到了同样的问题,并意识到这是一个编码问题。它是通过编码发送到服务器的数据的值来解决的。尝试类似:

$(document).ready(function() {

  $.getJSON('https://sendgrid.com/api/user.stats.json',
    {
      'api_user': encodeURIComponent('me@mydomain.com'),
      'api_key': encodeURIComponent('MYAPIKEY'),
      'user': encodeURIComponent('me@mydomain.com'),
      'category': encodeURIComponent('MY_CATEGORY')
    },
    function(response){
      alert('received response');
    }
  );

});

然后解码后端的数据。希望它可以帮到某人。