【问题标题】:Javascript getJson callbacks not working (what is wrong with this?)Javascript getJson 回调不起作用(这有什么问题?)
【发布时间】:2013-08-17 05:14:14
【问题描述】:

我正在尝试使用需要调用以获取具有基本 HTTP 身份验证的 Json 的 API。我不擅长 javascript。

我的代码是:

    <script type="text/javascript">

    $.getJSON({
        'url': 'http://data.unistats.ac.uk/api/KIS/Institutions.JSON?pageIndex=1&pageSize=25',
        'beforeSend': function(xhr) {
            xhr.setRequestHeader("Authorization",
                "Basic " + encodeBase64("ABCDEF" + ":" + password));
        },
        success: function(result) {
            alert('done');
        },
        error: function(result) {
            alert('no');
        }
    });
    </script>

我希望这会调用成功或错误之一。所以输出应该是一个警告说“完成”,或者一个警告说“不”。甚至开发者控制台中的错误告诉我出了什么问题。

我什么都没有,警报也没有显示,控制台也没有错误。有什么想法吗?

谢谢,

编辑:使用 firebug 我看到请求标头是: 请求标头显示为:

OPTIONS /api/KIS/Institutions.JSON?pageIndex=1&pageSize=25 HTTP/1.1
Host: data.unistats.ac.uk
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Origin: null
Access-Control-Request-Method: GET
Access-Control-Request-Headers: authorization
Connection: keep-alive

这似乎不正确,因为它应该是: 授权:基本 TheSecurityKey

响应为 405,方法不允许 重新加载页面以获取源代码:http://data.unistats.ac.uk/api/KIS/Institutions.JSON?pageIndex=1&pageSize=25

响应标头:

HTTP/1.1 405 Method Not Allowed
Cache-Control: private
Allow: GET
Content-Length: 1725
Content-Type: text/html; charset=UTF-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Fri, 16 Aug 2013 21:00:11 GMT

当我从我设置的服务器上尝试时

可以在这里看到: http://spindroid.co.uk/tt/byUniversity.html

部分解决方案

使用 jsonp 会收到响应,但未附加标头,因此我缺少身份验证。

            <script type="text/javascript">


$(document).ready(function () {
jQuery.support.cors = true;
$.ajax({
        'type': "GET",
        'dataType': 'jsonp',
        'url': 'https://data.unistats.ac.uk/api/KIS/Institutions.JSON?pageIndex=1&pageSize=25',
        'beforeSend': function(xhr) {
            xhr.setRequestHeader("Authorization",
                "Basic " + btoa("AAA"));
                console.error("Basic " + btoa("AAA"));
        },
        success: function(result) {
            alert('done');
        },
        error: function(jqXHR, status, error){ console.log(status, error); }
    });
}
);      </script>   

【问题讨论】:

  • 你在firebug控制台中检查过请求是否真的要发送到服务器吗?还要检查您的服务器端方法是否接受“get”类型或“post”类型请求或两者兼而有之。
  • 您是从文件系统还是从本地/远程 http 服务器加载页面?来自null Origin - 看起来您正在加载文件系统。尝试加载 http 服务器。
  • 这篇文章给出了 php 的服务器端 curl 答案:stackoverflow.com/questions/11946307/…

标签: javascript jquery getjson


【解决方案1】:

getJSON method 不接受带有设置的对象。请改用ajax method,并将dataType: 'json' 指定为设置之一。

【讨论】:

  • 我想你可以使用$.ajaxSetup(),然后调用$.getJSON()
  • @Barmar:是的,这也是一种选择。但是,这会影响所有 ajax 调用,而不仅仅是这个。
  • 谢谢,我已经尝试过了,我似乎比我更进一步。不幸的是,现在我收到错误情况警报('no')。有什么好的调试方法吗?
  • @NutterzUK:是的,通过console.logging 将参数传递给error,而不仅仅是提醒"no"。像这样:error: function(jqXHR, status, error){ console.log(status, error); }
  • 谢谢,我收到“errorNo Transport”。正如 Faisal mq 询问我是否尝试过使用萤火虫。我刚刚做了,我看到一个错误 405 - Method not allowed。我已将 firebug 请求中显示的标题添加到问题中。
猜你喜欢
  • 2015-01-16
  • 1970-01-01
  • 2021-06-02
  • 2010-12-16
  • 1970-01-01
  • 1970-01-01
  • 2012-11-21
  • 1970-01-01
相关资源
最近更新 更多